给一个n个点、m条边,无自环的无向图,每个顶点有一个颜色值,在出现过的颜色值中找到一个有最多相邻的颜色值,如果有多种相同的,输出一个小的。
1 const int maxn = 100011; 2 set<int>s[maxn]; 3 int c[maxn]; 4 bool vis[maxn]; 5 6 int main(){ 7 #ifndef ONLINE_JUDGE 8 freopen("in.txt", "r", stdin); 9 #endif 10 int n, m, a, b; 11 scan_d(n); 12 scan_d(m); 13 int maxx = -1; 14 for(int i = 1; i <= n; i++){ 15 scan_d(c[i]); 16 vis[c[i]] = true; 17 } 18 for(int i = 1; i <= m; i++){ 19 scan_d(a); 20 scan_d(b); 21 if(c[a] != c[b]){ 22 s[c[a]].insert(c[b]); 23 s[c[b]].insert(c[a]); 24 } 25 } 26 for(int i = 1; i <= maxn; i++){ 27 if(vis[i]){ 28 checkmax(maxx, (int)s[i].size()); 29 } 30 } 31 for(int i = 1; i <= maxn; i++){ 32 if(s[i].size() == maxx && vis[i]){ 33 maxx = i; 34 break; 35 } 36 } 37 printf("%d\n", maxx); 38 }