Submission #1120740

#TimeUsernameProblemLanguageResultExecution timeMemory
11207400pt1mus23KOVANICE (COI15_kovanice)C++14
100 / 100
1028 ms75832 KiB
// Ali // #pragma GCC optimize("Ofast,unroll-loops") #include <bits/stdc++.h> using namespace std; #define int long long int #define ins insert #define pii pair<int,int> #define pb push_back #define endl '\n' #define putr(x) cout<<x<<endl;return; #define all(x) x.begin(),x.end() const int mod = 1e9 +7, sze = 3e5+23, inf = 2e9, LG = 19,pr = 31; int val[sze]; vector<int> graph[sze]; int used[sze]; int sub[sze]; void dfs(int node){ if(used[node]){ return; } sub[node]=1; used[node]=1; for(auto v:graph[node]){ if(!used[v]){ dfs(v); } sub[node]=max(sub[node],sub[v]+1); } } void dfs2(int node,int x){ if(used[node] || !x){ return; } used[node]=1; bool fu=false; // cout<<node<<endl; for(auto v:graph[node]){ if(sub[v] == (x-1)){ if(!used[v]){ dfs2(v,x-1); } fu=true; } } if(fu || (graph[node].size()==0 && x==1)){ val[node]=x; } } struct lan{ vector<int> parent; vector<int> sz; lan(int n){ parent.resize(n+23); iota(all(parent),0); sz.resize(n+23,1); } int root(int a){ if(parent[a]==a){ return a; } return parent[a]=root(parent[a]); } void unite(int a,int b){ int x = root(a); int y = root(b); if(x!=y){ if(sz[x]<sz[y]){ swap(x,y); } sz[x]+=sz[y]; parent[y]=x; } } }; void fast(){ int n,m,qq; cin>>n>>m>>qq; vector<pair<pii,char>> q; bool flag=false; while(qq--){ string s; cin>>s; string a=""; string b=""; char op; for(auto v:s){ if(v=='<' || v=='='){ op = v; swap(a,b); } else{ a+=v; } } swap(a,b); q.pb({{stoll(a),stoll(b)},op}); // cout<<a<<" "<<op<<" "<<b<<endl; if(op=='<' && !flag){ flag=true; } } lan dsu(m+23); if(flag){ vector<int> fk(m+23,0); set<int> lst; vector<pair<int,int>> fuk; for(auto [vv,op]:q){ int a = vv.first; int b = vv.second; if(op=='='){ dsu.unite(a,b); } else{ // val[a]=1; // val[b]=2; // a<b ise ne olucak ? // en boyuk hansidi o lazim fuk.pb({a,b}); } } set<pair<int,int>> gg; for(auto &v:fuk){ v.first =dsu.root(v.first); v.second =dsu.root(v.second); lst.ins(v.first); lst.ins(v.second); } for(auto [k,v]:fuk){ int a = dsu.root(k); if(a!=k && lst.find(k)!=lst.end()){ lst.erase(k); // cout<<"silk "<<k<<endl; } int b = dsu.root(v); if(b!=v && lst.find(v)!=lst.end()){ // cout<<" silv"<<v<<endl; lst.erase(v); } if(gg.find({b,a})==gg.end()){ gg.ins({b,a}); graph[b].pb(a); } } for(auto v:fuk){ int a = dsu.root(v.first); // cout<<v.first<<" ,"<<v.second<<endl; if(lst.find(a)!=lst.end()){ lst.erase(lst.find(a)); } } // for(auto v:lst){ // cout<<v<<" "; // }cout<<endl; if(!lst.empty()){ for(auto root:lst){ dfs(root); } for(int i=0;i<sze;i++){ used[i]=0; } for(auto root:lst){ dfs2(root,n); } } /* 2 5 3 1<2 3<2 3=4 */ for(int i =1;i<=m;i++){ fk[dsu.root(i)]|=val[i]; } for(int i =1;i<=m;i++){ val[i]=fk[dsu.root(i)]; } } for(int i=1;i<=m;i++){ if(val[i]<=0){ cout<<"?"<<endl; } else{ cout<<"K"<<val[i]<<endl; } } } signed main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tt = 1; // cin>>tt; while(tt--){ fast(); } return 0; }

Compilation message (stderr)

kovanice.cpp: In function 'void fast()':
kovanice.cpp:112:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  112 |         for(auto [vv,op]:q){
      |                  ^
kovanice.cpp:133:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  133 |         for(auto [k,v]:fuk){
      |                  ^
kovanice.cpp:103:9: warning: 'op' may be used uninitialized in this function [-Wmaybe-uninitialized]
  103 |         if(op=='<' && !flag){
      |         ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...