「美登杯」 C 小花梨判連通

2022-05-01 16:03:14 字數 1040 閱讀 2039

題意:給定n個點和基於這n個點為基的k張無向圖   輸出每個點所在的聯通塊數量 ( 滿足所有的圖)

並查集並不好操作

可以 進行dfs染色  然後把染色情況加入到color  再進行對映  顯然如果兩個點的染色情況完全一樣  那麼就在同一點

#includeusing

namespace

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;

}

view code

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 ...