Submission #1202137

#TimeUsernameProblemLanguageResultExecution timeMemory
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...