Submission #123551

#TimeUsernameProblemLanguageResultExecution timeMemory
123551samsDijamant (COI16_dijament)C++14
27 / 100
907 ms6620 KiB
//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 (stderr)

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)
                         ~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...