제출 #1202137

#제출 시각아이디문제언어결과실행 시간메모리
1202137WH8KOVANICE (COI15_kovanice)C++20
50 / 100
2096 ms37928 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define f first #define s second #define pll pair<int,int> #define pb push_back #define g0(x) get<0>(x) #define g1(x) get<1>(x) #define g2(x) get<2>(x) int n,m,v,p[300005]; vector<vector<int>> al(300005), ral(300005); int in[300005], rin[300005], dep[300005], rdep[300005]; vector<pll> ed; int par(int x){ if(p[x]==0)return x; return p[x]=par(p[x]); } void merge(int a,int b){ int x=par(a),y=par(b); if(x==y)return; p[x]=y; } void dfs(int x, vector<vector<int>> & ad, int dp[]){ //~ printf("at %lld\n",x); for(auto it:ad[x]){ dp[it]=dp[x]+1; dfs(it,ad,dp); } } signed main(){ cin>>n>>m>>v; for(int i=0;i<v;i++){ int a,b; char c; cin>>a>>c>>b; if(c=='='){ merge(a,b); } else { if (c=='>')swap(a,b); ed.pb({a,b}); } } for(auto [a,b]:ed){ //~ printf("%lld %lld\n",par(a),par(b)); al[par(a)].pb(par(b)); in[par(b)]++; ral[par(b)].pb(par(a)); rin[par(a)]++; } vector<int> root, rroot; for(int i=1;i<=m;i++){ if(i==par(i) and in[i]==0)root.pb(i); if(i==par(i) and rin[i]==0)rroot.pb(i); } //~ for(auto it:root)cout<<it<<endl; //~ return 0; for(auto it:root) dfs(it, al, dep); for(auto it:rroot) dfs(it, ral, rdep); for(int i=1;i<=m;i++){ if(dep[par(i)]+rdep[par(i)]==n-1){ cout<<'K'<<dep[par(i)]+1<<"\n"; } else cout<<"?\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...