題意:給定n個點和基於這n個點為基的k張無向圖 輸出每個點所在的聯通塊數量 ( 滿足所有的圖)
並查集並不好操作
可以 進行dfs染色 然後把染色情況加入到color 再進行對映 顯然如果兩個點的染色情況完全一樣 那麼就在同一點
#includeusingview codenamespace
std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define ri(n) scanf("%d",&(n))
#define rii(n,m) scanf("%d%d",&n,&m)
#define riii(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define rs(s) scanf("%s",s);
#define ll long long
#define pb push_back
#define clr(a,v) memset(a,v,sizeof a)
/////////////////////////////////
/#define inf 0x3f3f3f3f
const
int n=100000+5
;map
int>,int>mp;
vector
color[n],edge[n];
intn,m,u,v,q,cnt,vis[n];
void dfs(int
u)int
main()
cnt=0
; rep(i,
1,n)
if(!vis[i])dfs(i),++cnt;
}rep(i,
1,n)mp[color[i]]++;rep(i,1
,n) cout
return0;
}
C 小花梨判連通
題意 給你k張圖,每個圖有點和邊。輸出每個點1 2.n的點在每張圖裡面都聯通的點的個數。思路 染色也行,並查集也行。在k張圖裡面給每個點染色。比如有3個點,4張圖。染色情況如下 點1 1 1 1 1 點2 1 1 2 2 點3 1 1 2 2 將每個點的k個染色情況作為map的key,點2 1 1 ...