HDU4324Triangle LOVE
来源:互联网 发布:桌面数字时钟软件 编辑:程序博客网 时间:2024/05/23 11:56
这道题其实就是一道拓扑排序的模板题,只要有环就证明存在三角关系,代码如下
#include <iostream>#include <string.h>#include <stdio.h>#include <queue>using namespace std;const int N=2005;bool vis[N];int head[N],degree[N];int q[N],cnt,num;struct edgenode{ int to,next;} edge[N*N];//这里一定要注意,把数组开大,开到N*N,非常神奇的是我TLE了一下午,居然不是REvoid init()//初始化{ cnt=0; memset(vis,false,sizeof(vis)); memset(head,-1,sizeof(head)); memset(degree,0,sizeof(degree));}void add(int u,int v)//加边{ degree[v]++; edge[cnt].to=v; edge[cnt].next=head[u]; head[u]=cnt++;}bool topu(int n)//拓扑排序模板{ queue<int>q; num=0; for(int i=0; i<n; i++) { if(!degree[i]) { q.push(i); num++; } } while(!q.empty()) { int t=q.front(); q.pop(); for(int k=head[t]; k!=-1; k=edge[k].next) { degree[edge[k].to]--; if(!degree[edge[k].to]) { q.push(edge[k].to); num++; } } } return num==n;}int main(){ int T,n,case2=1; scanf("%d",&T); char s[2005]; while(T--) { bool flag=0; scanf("%d",&n); init(); for(int i=0; i<n; i++)//这里不能单个字符输入,否则也会TLE { scanf("%s",s); for(int j=0; j<n; j++) { if(s[j]=='1') { add(i,j); } } } flag=topu(n); if(flag) { printf("Case #%d: ",case2++); printf("No\n"); } else { printf("Case #%d: ",case2++); printf("Yes\n"); } } return 0;}
0 0
- HDU4324Triangle LOVE
- hdu4324Triangle LOVE(拓扑排序)
- Love
- LOVE
- love
- Love
- Love
- love
- love
- love
- Love
- Love
- love
- love
- love
- love
- love ??
- LOVE
- Windows程序设计 VC++6.0开发环境熟悉
- 同时管理多个 SSH 私钥, 可以实现同时使用多个 git 源管理工具
- 上升子序列
- 大数乘法
- 链接和作用域(extern、static、auto)
- HDU4324Triangle LOVE
- TCP连接为什么要三次握手
- 取数字问题
- 字符指针变量
- redis持久化策略RDB和AOF
- 手游服务器开发技术详解
- 第四周项目5--用递归方法求解(4)
- 活动选择
- 轻松入门React和Webpack