poj 3687 Labeling Balls(拓扑排序)
来源:互联网 发布:最赚钱的软件 编辑:程序博客网 时间:2024/05/16 17:33
这个题目必须反向建图,这个我只能举个反例说明,但是没有办法证明。
#include<algorithm>
#include<iostream>
#include<stdio.h>
bool grid[202][202],tag[202];
int top[202],ball[202];
int main()
{
int cases;
int i,j,k,M,N,a,b;
bool flag;
scanf("%d",&cases);
while(cases--)
{
memset(grid,0,sizeof(grid));
memset(top,0,sizeof(top));
memset(ball,0,sizeof(ball));
memset(tag,0,sizeof(tag));//标识结点是否已经被用
scanf("%d%d",&N,&M);
for(i=0;i<M;i++)//反向建图
{
scanf("%d%d",&a,&b);
grid[a][b]=1;
top[b]++;
}
for(i=1;i<=N;i++)
{
flag=0;
for(j=1;j<=N;j++)
if(!top[j]&&!tag[j])//此结点没有被用,且没有结点指向它
{
flag=1;
tag[j]=1;
break;
}
if(flag)
{
for(k=1;k<=N;k++)//去掉与j为出度的边
if(grid[j][k])
top[k]--;
ball[i]=j;
}
else
break;
}
if(flag)//若存在这样一个序列
{
// for(i=1;i<=N;i++)
// printf("%d ",ball[i]);
// printf("/n");
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
if(ball[j]==i)
break;
printf("%d ",j);
}
printf("/n");
}
else//若序列不存在
printf("-1/n");
}
return 0;
}
- poj 3687 Labeling Balls(拓扑排序)
- POJ 3687 Labeling Balls 拓扑排序
- poj 3687 【拓扑排序】【Labeling Balls】
- poj Labeling Balls 3687 拓扑排序!!!!
- poj 3687 Labeling Balls 拓扑排序
- POJ 3687Labeling Balls(拓扑排序)
- POJ 3687 Labeling Balls 拓扑排序
- poj 3687 Labeling Balls ( 拓扑排序 )
- Poj 3687 Labeling Balls[拓扑排序]
- Poj 3687 Labeling Balls (拓扑排序)
- poj 3687 Labeling Balls(拓扑排序)
- [POJ 3687] Labeling Balls [拓扑排序]
- POJ 3687 Labeling Balls(拓扑排序)
- poj 3687 Labeling Balls 拓扑排序
- POJ 3687-Labeling Balls(逆序拓扑排序)
- POJ 3687 Labeling Balls 逆向拓扑排序
- poj 3687 Labeling Balls(拓扑排序)
- **poj 3687 Labeling Balls (*拓扑排序)
- VS2005 没有找到MFC80D.DLL的解决方法
- 善待内存 [下]
- 守城之战1.1发布
- GetCurrentProcessID、OpenProcessToken、LookupPrivilegeValue、AdjustTokenPrivileges
- 学习网站推荐
- poj 3687 Labeling Balls(拓扑排序)
- 线性代数题
- 用JQuery获取AspxGridView各列列名和宽度
- 设计模式学习
- 关于手机搜索
- 安家了,努力学习,快快成长。
- 用JQuery获取AspxGridView单元格的值
- lesson 2
- ASP.NET URL Rewrite. URL重写