37PTS求调
查看原帖
37PTS求调
1029575
Alg_orithm楼主2024/8/12 10:20

并查集求dalao调

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline void LOG(string s,int n)
{
	cout<<s<<'='<<n<<'\n';
}
inline void LOG(string s,char c)
{
	cout<<s<<'='<<c<<'\n';
}
inline void LOG(string s,bool b)
{
	if(b)
		cout<<s<<"=true"<<'\n';
	else
		cout<<s<<"=false"<<'\n';
}
inline void LOG(string s,double b)
{
	cout<<s<<'='<<b<<'\n';
}
int f[210];
bool g[210][210];
int n,ans=0; 
int fi(int k)
{
	if(f[k]!=k)
		f[k]=fi(f[k]);
	return f[k];
}
void un(int a,int b)
{
	f[b]=a;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	int t,k,i,j;
	cin>>n;
	for(i=1;i<=n;i++)
	{
		f[i]=i;
		while(1)
		{
			cin>>t;
			if(t==0)
				break;
			g[i][t]=1;
		}
	}
	for(k=1;k<=n;k++)
		for(i=1;i<=n;i++)
			for(j=1;j<=n;j++)
				g[i][j]=g[i][j]||(g[i][k]&&g[k][j]);
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			if(g[i][j])
				un(i,j);
	for(i=1;i<=n;i++)
		cout<<fi(i)<<' ';
	cout<<endl<<endl;
	for(i=1;i<=n;i++)
		if(f[i]==i)
			ans++;
	cout<<ans;
	return 0;
}
2024/8/12 10:20
加载中...