• UVa 615


    题目:给你一些有向边(端点,长度为1)。推断给定的图是否是一棵树。

    分析:图论。并查集。树是一个全部点都连接的有向无环图(不连接的是森林)。

                 依照树的定义推断是否有环就可以,有环分成两种:

                 1.链状环;2.存在节点有多个父亲节点;

                 这两种情况,仅仅要用并查集在合并前推断是否数以一个集合就可以,

                 假设在统一集合中,这条边一定形成环;

                 注意推断不能是森林。

    说明:╮(╯▽╰)╭又是一个没有数据范围的题目。

    #include <iostream>
    #include <cstdlib> 
    #include <cstdio>
    
    using namespace std;
    
    int used[100001];
    int sets[100001],rank[100001];
    
    int set_root(int a)
    {
    	if (a != sets[a])
    		sets[a] = set_root(sets[a]);
    	return sets[a];
    }
    
    int main()
    {
    	int a,b,t = 1;
    	while (~scanf("%d%d",&a,&b) && a >= 0 && b >= 0) {
    		for (int i = 0 ; i < 100000 ; ++ i) {
    			sets[i] = i;
    			used[i] = rank[i] = 0;
    		}
    		int flag = 1;
    		while (a||b) {
    			if (set_root(a) == set_root(b))
    				flag = 0;
    			if (flag) {
    				used[a] = used[b] = 1;
    				sets[set_root(b)] = set_root(a);
    			}
    			scanf("%d%d",&a,&b);
    		}
    		
    		if (flag == 1) {
    			int count = 0;
    			for (int i = 0 ; i < 100000 ; ++ i)
    				if (used[i] && set_root(i) == i)
    					if (count ++) {
    						flag = 0;
    						break;
    					}
    		}
    		
    		if (flag == 0)
    			printf("Case %d is not a tree.
    ",t ++);
    		else printf("Case %d is a tree.
    ",t ++);
    	}
    	
    	return 0;
    }
    

  • 相关阅读:
    Linux服务器查看日志命令总结
    nginx高可用(5)
    nginx动静分离(4)
    nginx负载均衡(3)
    nginx反向代理(2)
    nginx安装及使用(1)
    Nginx 简易教程
    uiautomator2中文文档
    TKinter之输入框
    nginx解决反向代理session丢失问题
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/6758981.html
Copyright © 2020-2023  润新知