Codeforces Round #151 (Div. 2) D. Colorful Graph

给一个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 }

你可能感兴趣的:(codeforces)