//COI dijament
#include <bits/stdc++.h>
#define F first
#define S second
using namespace std;
typedef unsigned long long ll;
typedef pair<int, int> ii;
const int maxn = 1e3+10, inf = 0x3f3f3f3f;
struct node
{
int u, f, d;
};
int n, nd;
map<string, int> inh;
int t, pross[maxn], vis[maxn];
ll sub[maxn];
vector<int> graph[maxn];
int dfs(int u)
{
vis[u] = 1;
pross[u] = 1;
for(int v: graph[u])
{
if(!vis[v])
{
if(dfs(v) == 0) return 0;
}
else if(pross[v] == 1) return 0;
}
pross[u] = 0;
return 1;
}
void init()
{
memset(pross, 0, sizeof pross);
memset(vis, 0, sizeof vis);
}
void debug()
{
for(int i = 1 ; i <= nd ; ++i)
{
if(graph[i].size() > 0) cout << i << ": \n ";
for(int u: graph[i]){
cout << u << ' ';
}
if(graph[i].size() > 0) cout << "\n\n";
}
}
int diamond(int u)
{
for(int i = 0 ; i < graph[u].size() ; ++i)
{
int a = graph[u][i];
for(int j = i + 1 ; j < graph[u].size() ; ++j)
{
int b = graph[u][j];
int c1 = sub[b]&(1<<a);
int c2 = sub[a]&(1<<b);
int c3 = sub[a]&sub[b];
if(c1 == 0 && c2 == 0 && c3 > 0)
{
return 0;
}
}
}
return 1;
}
int main()
{
cin >> n;
for(int i = 0 ; i < n ; ++i)
{
string name, pt, s;
cin >> name >> pt;
int ok = 1;
if(inh[name] != 0) ok = 0;
vector<int> ad;
while(cin >> s && s != ";")
{
if(inh[s] == 0 || s == name) ok = 0;
else ad.push_back(inh[s]);
}
if(!ok) cout << "greska\n";
else
{
inh[name] = ++nd;
for(auto u: ad)
{
graph[nd].push_back(u);
sub[nd] = (1<<u);
sub[nd] |= sub[u];
/*
sub[nd][u] = 1;
for(int i = 0 ; i < graph[u].size() ; ++i)
{
int v = graph[u][i];
sub[nd][v] = 1;
}
*/
}
init();
ok = min(ok, dfs(nd));
if(!ok)
{
/*for(int i = 1 ; i <= n ; ++i)
{
sub[nd][i] = 0;
}*/
sub[nd] = 0;
graph[nd].clear();
inh[name] = 0;
nd--;
cout << "greska\n";
continue;
}
ok = diamond(nd);
if(!ok)
{
sub[nd] = 0;
/*
for(int i = 1 ; i <= n ; ++i)
{
sub[nd][i] = 0;
}
*/
graph[nd].clear();
inh[name] = 0;
nd--;
cout << "greska\n";
continue;
}/**/
cout << "ok\n";
}
}
}
Compilation message
dijament.cpp: In function 'int diamond(int)':
dijament.cpp:64:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0 ; i < graph[u].size() ; ++i)
~~^~~~~~~~~~~~~~~~~
dijament.cpp:68:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int j = i + 1 ; j < graph[u].size() ; ++j)
~~^~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
3 ms |
376 KB |
Output is correct |
3 |
Correct |
3 ms |
376 KB |
Output is correct |
4 |
Correct |
2 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
3 ms |
376 KB |
Output is correct |
3 |
Correct |
3 ms |
376 KB |
Output is correct |
4 |
Correct |
2 ms |
376 KB |
Output is correct |
5 |
Correct |
3 ms |
376 KB |
Output is correct |
6 |
Correct |
7 ms |
376 KB |
Output is correct |
7 |
Correct |
7 ms |
380 KB |
Output is correct |
8 |
Correct |
2 ms |
376 KB |
Output is correct |
9 |
Correct |
2 ms |
376 KB |
Output is correct |
10 |
Correct |
2 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
3 ms |
376 KB |
Output is correct |
3 |
Correct |
3 ms |
376 KB |
Output is correct |
4 |
Correct |
2 ms |
376 KB |
Output is correct |
5 |
Correct |
3 ms |
376 KB |
Output is correct |
6 |
Correct |
7 ms |
376 KB |
Output is correct |
7 |
Correct |
7 ms |
380 KB |
Output is correct |
8 |
Correct |
2 ms |
376 KB |
Output is correct |
9 |
Correct |
2 ms |
376 KB |
Output is correct |
10 |
Correct |
2 ms |
376 KB |
Output is correct |
11 |
Incorrect |
2 ms |
376 KB |
Output isn't correct |
12 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
907 ms |
6620 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |