zoukankan      html  css  js  c++  java
  • 源哥每日一题第20弹 poj 1272 还是冰茶集

    连接:http://acm.hdu.edu.cn/showproblem.php?pid=1272

    题意:要 要 要 要啥题意啊就是问题这个东西是不是一颗树

    解决方式有很多种,说是冰茶集,但是你用别的方法也可以做啊~

    思路:首先作为一棵树一定满足顶点数等于边数+1,但只满足了这个条件也不行(脑补一个圆)判断方法:比方说a和b俩节点,他俩爹要是一样,你再把a和b连上,那不就有环了吗

    p.s. 我记得这个题在hdu上会爆栈来着……

    还想硬广一下 #pragma comment(linker, "/STACK:1024000000,1024000000")  呢 不开心

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int pre[100005];
    set<int> s;
    int f(int x) {
    	return x == pre[x] ? x : pre[x] = f(pre[x]);
    }
    int main() {
    	int a, b;
    	while (scanf("%d%d",&a,&b) && a+b!=-2) {
    		if (a+b==0) {
    			puts("Yes"); continue;
    		}
    		s.clear();
    		int ans = 0;
    		for (int i = 0; i  <= 100000; i++) {
    			pre[i] = i;
    		}
    		int flag = 0;
    		s.insert(a);
    		s.insert(b);
    		if (a==b) flag = 1;
    		else pre[b] = a;
    		ans++;
    		while(scanf("%d%d",&a,&b) && a+b) {
    			s.insert(a);s.insert(b);
    			if(a==b || f(a) == f(b)) flag = 1;
    			else pre[f(b)] = pre[f(a)];
    			ans++;
    		}
    		if(!flag && ans == s.size() -1) {
    			cout << "Yes" << '
    ';
    		} else {
    			cout << "No" << '
    ';
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    javascript性能
    图片及js的预加载
    url参数解析
    javascript预编译
    13、MVC 设计思想
    12、JDBC 流程
    线程-2、sleep() 、join()、yield()有什么区别
    线程-1、创建线程的方式及实现
    集合-7、HashMap实现原理及源码分析
    集合-6、HashSet 和 HashMap 区别
  • 原文地址:https://www.cnblogs.com/fengyuzhicheng/p/9201711.html
Copyright © 2011-2022 走看看