九度题目1481:Is It A Tree?
2016-09-04 20:33
344 查看
题意:
判断是不是树的条件如下
1、只有一个根节点,根节点的入度为0
2、每个点只有一条边指向该节点
3、从根节点开始只有一条边指向该节点
输入输出格式
每一个case以 0 0 结束
-1 -1 结束所有输入样例
竟然还有判断有没有环,疏忽了。
判断是不是树的条件如下
1、只有一个根节点,根节点的入度为0
2、每个点只有一条边指向该节点
3、从根节点开始只有一条边指向该节点
输入输出格式
每一个case以 0 0 结束
-1 -1 结束所有输入样例
竟然还有判断有没有环,疏忽了。
#include<stdio.h> #include<iostream> #include<vector> #include<string.h> #include<queue> #include<set> using namespace std; vector<int>G[100005]; vector<int>::iterator ite; queue<int>q; set<int>s; int fr,to; int maxn; int cases; int n; bool vis[100005]; int degree[100005]; bool isTree() { while(!q.empty()) q.pop(); for(int i = 1;i<=maxn;i++) { if(vis[i]) { if(degree[i]==0) q.push(i); else if(degree[i]>1) return false; } } if(q.size()>1) return false; int cnt = 0; while(!q.empty()) { int tmp = q.front(); q.pop(); cnt++; for(ite = G[tmp].begin();ite!=G[tmp].end();ite++) { degree[*ite]--; if(degree[*ite]==0) q.push(*ite); } } if(cnt==n) return true; else return false; } int main() { cases = 0; while(~scanf("%d%d",&fr,&to)) { if(fr == -1&&to==-1) break; if(fr!=0&&to!=0) { maxn =max(maxn,fr); maxn =max(maxn,to); //if(!G[to].find(fr)) G[fr].push_back(to); degree[to]++; if(!vis[fr]) { vis[fr] = 1; n++; } if(!vis[to]) { vis[to] = 1; n++; } } else if(fr==0&&to==0) { cases++; int flag = 1; int rot = 0; // n=s.size(); // for(int i = 1 ; i <=maxn;i++) // { // if(vis[i]==1) // { // degree[i] = G[i].size(); // // cout<<i<<endl; // if(G[i].size()>1) // flag = 0; // else if(G[i].size()==0) // { // // if(rot) // flag = 0; // else // rot = 1; // } // } // // // } // cout<<flag<<" "<<rot<<endl; if(isTree()) cout<<"Case "<<cases<<" is a tree."<<endl; else cout<<"Case "<<cases<<" is not a tree."<<endl; for(int i = 1 ; i <=maxn;i++) { degree[i] = 0; G[i].clear(); } memset(vis,0,sizeof(vis)); n = 0; } } return 0; } /* 6 8 5 3 5 2 6 4 5 6 0 0 8 1 7 3 6 2 8 9 7 5 7 4 7 8 7 6 0 0 3 8 6 8 6 4 5 3 5 6 5 2 0 0 3 8 6 8 6 4 5 3 5 6 5 2 9 1 0 0 */
相关文章推荐
- css盒模型
- 筛选法找素数算法的一点改进
- rsync 使用示例
- pip安装lxml时报错
- Android并发-Future,FutureTask和Callable及AsyncTask
- mvc从分析到实例,实例到总结
- 于堆栈的(Stack-based ) 和基于寄存器(Register-based) 的虚拟机区别
- CF #368 D Persistent Bookcase 操作树~?
- Find the Difference —— leetcode
- 寻找徐峥小游戏
- 面试题-多线程编程
- 无密码通过ssh执行rsync
- Android的缓存技术:LruCache和DiskLruCache
- Android进程保活
- Java爬虫——抓取静态网页
- 编写SQL语句操作数据库
- Windows核心编程 第五章 作业(上)
- 虚拟机下centos6.5系统输入ifconfig命令不能显示ip地址
- Javascript之对象组合继承
- Java学习总结记录(2)——JVM、JRE和JDK