68分并查集求调
查看原帖
68分并查集求调
1099365
yunren2012楼主2024/12/15 19:17
#include<bits/stdc++.h>
using namespace std;
string x,y;
char c;
int n,m,a,b,f[100005];
int find(int x){
	if(f[x]!=x)
		f[x]=find(f[x]);
	return f[x];
}
int main(){
    cin>>n>>m>>x;
    x=" "+x;
    for(int i=1; i<=n; i++)
    	f[i]=i;
    for(int i=1; i<n; i++)
    {
    	cin>>a>>b;
    	int r1=find(a),r2=find(b);
    	if(x[a]==x[b] && r1!=r2)
    		f[r2]=r1;
    }
    for(int i=1; i<=n; i++)
    {
    	cin>>a>>b>>c;
    	if(x[a]==c || x[b]==c || find(a)!=find(b))
    		y+='1';
    	else
    		y+='0';
    }
    cout<<y;
    return 0;
}
2024/12/15 19:17
加载中...