zoukankan      html  css  js  c++  java
  • 【Codeforces 246D】Colorful Graph

    【链接】 我是链接,点我呀:)
    【题意】

    让你找到所有和x颜色的点中,和该颜色的点颜色不同的相邻的点的个数(重复颜色算一次) 求出哪种颜色的所要求的点的数量最多.

    【题解】

    对于每一条边只会被查到两次。 所以按照题意暴力枚举的时间复杂度就是O(n+m)级别的 至于查重 只要对找过的点打个标记就很好处理的

    【代码】

    import java.io.*;
    import java.util.*;
    
    public class Main {
        
        static InputReader in;
        static PrintWriter out;
            
        public static void main(String[] args) throws IOException{
            //InputStream ins = new FileInputStream("E:\rush.txt");
            InputStream ins = System.in;
            in = new InputReader(ins);
            out = new PrintWriter(System.out);
            //code start from here
            new Task().solve(in, out);
            out.close();
        }
        
        static int N = (int)1e5;
        static class Task{
            
        	int n,m;
        	int c[] = new int[N+10];
        	ArrayList<Integer> g[] = new ArrayList[N+10];
        	ArrayList<Integer> col[] = new ArrayList[N+10];
        	int mark[] = new int[N+10];
        	
            public void solve(InputReader in,PrintWriter out) {
            	for (int i = 1;i <= N;i++) g[i] = new ArrayList<Integer>();
            	for (int i = 1;i <= N;i++) col[i] = new ArrayList<Integer>();
            	n = in.nextInt();m = in.nextInt();
            	for (int i = 1;i <= n;i++) {
            		c[i] = in.nextInt();
            		col[c[i]].add(i);
            	}
            	for (int i = 1;i <= m;i++) {
            		int x,y;
            		x = in.nextInt();y = in.nextInt();
            		g[x].add(y);g[y].add(x);
            	}
            	int ans = -1,idx = 0;
            	for (int i = 1;i <= N;i++)
            		if (!col[i].isEmpty()) {
            			int cnt = 0;
            			for (int J = 0;J < (int)col[i].size();J++) {
            				int x = col[i].get(J);
            				int len = g[x].size();
                    		for (int j = 0;j < len;j++) {
                    			int y = g[x].get(j);
                    			if (c[y]!=c[x]) {
                    				if (mark[c[y]]!=i) {
                    					cnt++;
                    					mark[c[y]] = i;
                    				}
                    			}
                    		}
            			}
                		if (cnt>ans) {
                			ans = cnt;
                			idx = i;
                		}
            		}
            	out.println(idx);
            }
        }
    
        
    
        static class InputReader{
            public BufferedReader br;
            public StringTokenizer tokenizer;
            
            public InputReader(InputStream ins) {
                br = new BufferedReader(new InputStreamReader(ins));
                tokenizer = null;
            }
            
            public String next(){
                while (tokenizer==null || !tokenizer.hasMoreTokens()) {
                    try {
                    tokenizer = new StringTokenizer(br.readLine());
                    }catch(IOException e) {
                        throw new RuntimeException(e);
                    }
                }
                return tokenizer.nextToken();
            }
            
            public int nextInt() {
                return Integer.parseInt(next());
            }
        }
    }
    
  • 相关阅读:
    GPS定位的实现
    app启动监听网络类型
    tableview 刷新某一行跟某一组
    给app 添加手势验证
    类似支付宝启动页面的实现
    xcode 插件安装路径
    Windows上Dart安装
    Skynet通讯遇到的奇怪问题
    与流氓的斗争
    Skynet:Debug Console的扩展
  • 原文地址:https://www.cnblogs.com/AWCXV/p/10494520.html
Copyright © 2011-2022 走看看