• 【Codeforces 1106D】Lunar New Year and a Wander


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

    让你遍历n个节点,访问过的节点不操作。 如果是没有访问过的点,那就把它加到序列的末尾. 问你形成的最小字典序的序列是多少。

    【题解】

    显然每次找最小的标号 用一个集合维护当前能够到达的最小标号 一开始集合里面只有1 然后每次取出来最小的节点然后到达那个节点。 然后把和那个点相邻的节点全都加入到集合中(如果没有访问过) 已经访问过的点是可以重复走的。 所以可以一层一层地往外扩展"可以到达的节点集合" 重复上述步骤n次即可 有点像最短路的蓝白点思想,

    【代码】

    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.HashSet;
    import java.util.LinkedList;
    import java.util.Scanner;
    import java.util.Set;
    import java.util.TreeSet;
    import java.util.Vector;
    
    
    public class Main {
    		
    	static int n,m;
    	static ArrayList<Integer> g[];
    	static boolean tag[];
    	static TreeSet<Integer> myset;;
    	
    	public static void main(String[] args) throws IOException{
    		// TODO Auto-generated method stub
    		Scanner in = new Scanner(System.in);
    		n = in.nextInt();m = in.nextInt();
    		g = new ArrayList[n+10];
    		tag = new boolean[n+10];
    		myset = new TreeSet();
    		
    		for (int i = 1;i <= n;i++) g[i] = new ArrayList<>();
    		
    		for (int i = 0;i < m;i++) {
    			int x,y;
    			x = in.nextInt();y = in.nextInt();
    			g[x].add(y);g[y].add(x);
    		}
    		
    		myset.add(1);
    		for (int i = 1;i <= n;i++) {
    			int tag1 = myset.first();
    			myset.remove(tag1);
    			System.out.print(tag1+" ");
    			tag[tag1] = true;
    			for (int j = 0;j < (int)g[tag1].size();j++) {
    				int y = g[tag1].get(j);
    				if (tag[y]==false) {
    					myset.add(y);
    				}
    			}
    		}
    		
    		
    	}
    
    }
    
  • 相关阅读:
    背水一战 Windows 10 (97)
    背水一战 Windows 10 (96)
    背水一战 Windows 10 (95)
    背水一战 Windows 10 (94)
    背水一战 Windows 10 (93)
    Vue项目用于Ios和Android端开发
    Android assets文件夹之位置放置和作用
    轻松搭建Xposed Hook
    cordov vue项目中调用手机原生api
    Android 直接修改dex破解
  • 原文地址:https://www.cnblogs.com/AWCXV/p/10351542.html
Copyright © 2020-2023  润新知