AcWing 784. 强盗团伙
原题链接
简单
作者:
光在黑暗中发亮
,
2019-08-12 10:48:45
,
所有人可见
,
阅读 979
C++ 代码
#include <iostream>
using namespace std;
const int N=1010;
int group[N];
int f[N][N];
int find(int x)
{
if(group[x]!=x) group[x]=find(group[x]);
return group[x];
}
int main()
{
int num=0;
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
group[i]=i;
while(m--)
{
char re;
int p,q;
cin>>re>>p>>q;
if(re=='F') {group[find(p)]=find(q);f[p][q]=1;}
else
{
f[p][q]=2;
for(int i=1;i<=n;i++)
{
if(f[p][i]==2||f[i][p]==2)
group[find(i)]=find(q);
if(f[q][i]==2||f[i][q]==2)
group[find(i)]=find(p);
}
}
}
for(int i=1;i<=n;i++)
if(group[i]==i) num++;
cout<<num;
return 0;
}
我想问一下,并查集的时候 group[find(i)]=find(p);, 这里的p也可以指向find(i),那么有时候却不可以
for(int i = 1;i <=n;i++)
st.insert(p[i]);
cout << st.size() << endl;
这样做为什么不对呢
if(group[i]==i) num++;为啥要这样写呢,我这里不是很懂
每个团伙一个大哥,指向自己的不就是大哥吗,然后找一共多少大哥啊
好的,懂了