SDUT OJ 2140 图结构练习——判断给定图是否存在合法拓扑序列

#include<iostream>
#include<memory.h>
using namespace std;
int tp[11][11],visit[11];
int main()
{
    int n,m,i,j,k,s,o,c;
	int flag,count,a,b;
	while(cin>>n>>m)
	{
		s=1;
		o=0;
		count=0;
		memset(tp,0,sizeof(tp));
		memset(visit,0,sizeof(visit));
		for(i=1;i<=m;i++)
		{
			cin>>a>>b;
			tp[a][b]=1;
		}
	/*	for(i=1;i<=n;i++)
		{
			for(j=1;j<=n;j++)
				if(j==n)
					cout<<tp[i][j]<<endl;
				else
					cout<<tp[i][j]<<" ";
		}
		*/
		while(s)
		{
			flag=0;
			c=0;
			o++;
			for(j=1;j<=n;j++)
			{
				for(i=1;i<=n;i++)
				{
					if(tp[i][j]==0 && visit[j]==0)
					{
                        c++;
					}
					else
					{
						break;
					}
				}
				if(c==n)
				{
					flag=0;
					c=0;
				}
				else
				{
					flag=1;
					c=0;
				}
				if(flag==0)
				{
					for(k=1;k<=n;k++)
						tp[j][k]=0;
					count++;
					visit[j]=1;
				}
			}
			if(o>n)
				s=0;
			else
				s=1;
		}
	/*	for(i=1;i<=n;i++)
		{
			for(j=1;j<=n;j++)
				if(j==n)
					cout<<tp[i][j]<<endl;
				else
					cout<<tp[i][j]<<" ";
		}
		*/
		if(count==n)
			cout<<"YES"<<endl;
		else
			cout<<"NO"<<endl;
	}
	return 0;
}
/*
#include<iostream>
#include<memory.h>
using namespace std;
int tp[11][11],visit[11];
int n,m,u,v;
int dfs(int u)
{
	visit[u]=-1;
	for(v=1;v<=n;v++)
	{
		if(tp[u][v]==1)
		{
			if(visit[v]<0)
				return 0;
			else if(!visit[v] && !dfs(v))
				return 0;
		}
	}
	visit[u]=1;
	return 1;
}
int topu()
{
	for(u=1;u<=n;u++)
	{
		if(!visit[u])
		{
			if(!dfs(u))
				return 0;
		}
	}
	return 1;
}
int main()
{
	int i;
	while(cin>>n>>m)
	{
		memset(tp,0,sizeof(tp));
		memset(visit,0,sizeof(visit));
	    for(i=0;i<m;i++)
		{
			cin>>u>>v;
			tp[u][v]=1;
		}
	    int k=topu();
		if(k==0)
			cout<<"NO"<<endl;
		else
			cout<<"YES"<<endl;
	}
	return 0;
}
*/

时间: 2024-12-15 16:57:03

SDUT OJ 2140 图结构练习——判断给定图是否存在合法拓扑序列的相关文章

图结构练习——判断给定图是否存在合法拓扑序列

图结构练习——判断给定图是否存在合法拓扑序列 Time Limit: 1000MS Memory limit: 65536K 题目描述 给定一个有向图,判断该有向图是否存在一个合法的拓扑序列. 输入 输入包含多组,每组格式如下. 第一行包含两个整数n,m,分别代表该有向图的顶点数和边数.(n<=10) 后面m行每行两个整数a b,表示从a到b有一条有向边. 输出 若给定有向图存在合法拓扑序列,则输出YES:否则输出NO. 示例输入 1 0 2 2 1 2 2 1 示例输出 YES NO #inc

图结构练习——判断给定图是否存在合法拓扑序列(sdutoj)

#include<stdio.h>#include<string.h>int d[15],map[15][15],vis[15];int main(){    int i,j,k,f,n,m,u,v;    while(~scanf("%d%d",&n,&m))    {        memset(d,0,sizeof(d));        memset(map,0,sizeof(map));        memset(vis,0,size

图结构练习——推断给定图是否存在合法拓扑序列(拓扑排序推断环)

图结构练习--推断给定图是否存在合法拓扑序列 Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 给定一个有向图,推断该有向图是否存在一个合法的拓扑序列. 输入 输入包括多组.每组格式例如以下. 第一行包括两个整数n,m.分别代表该有向图的顶点数和边数.(n<=10) 后面m行每行两个整数a b.表示从a到b有一条有向边. 输出 若给定有向图存在合法拓扑序列,则输出YES.否则输出NO. 演示样例输入 1 0 2 2 1 2 2 1 演示样例输出 YES

2140=数据结构实验之图论十:判断给定图是否存在合法拓扑序列

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 int map[100][100],visited[100],du[100],flag,n,m,i,j,k; 5 int main() 6 { 7 while(~scanf("%d %d",&n,&m)) 8 { 9 memset(map,0,sizeof(map)); 10 memset(visite

拓扑排序 判断给定图是否存在合法拓扑序列 自家oj1393

1 //拓扑排序判断是否有环 2 #include<cstdio> 3 #include<algorithm> 4 #include<string.h> 5 #include<math.h> 6 #include<queue> 7 using namespace std; 8 typedef long long ll; 9 const int maxn=1e2+10; 10 int G[maxn][maxn]; 11 int in[maxn];

poj Transferring Sylla(如何快速的判断一个图是否是3—连通图,求割点,割边)

Transferring Sylla 首先,什么是k连通图?k连通图就是指至少去掉k个点使之不连通的图. 题目: 题目描述的很裸,就是给你一张图要求你判断这图是否是3-连通图. 算法分析: ///////////////////////////////////////////////////////////////////// (网上别人的分析,分析的很好所以直接引用了) 考虑一下不可行的情况,就是存在两点间的路径条数<3情况,那么我们可以去枚举两个点a和b,然后将其和相邻的边删除,然后判断联通

Theano学习笔记(三)——图结构

图结构(Graph Structures)是了解Theano内在工作原理的基础. Theano编程的核心是用符号占位符把数学关系表示出来. 图结构的组成部分 如图实现了这段代码: importtheano.tensor as T x= T.matrix('x') y= T.matrix('y') z= x + y 变量节点(variable nodes) 红色表示.变量节点都有owner,其中x与y的owner为none.z的owner为apply. 操作节点(op nodes) 绿色表示.表示

SDUT OJ 图练习-BFS-从起点到目标点的最短步数 (vector二维数组模拟邻接表+bfs , *【模板】 )

图练习-BFS-从起点到目标点的最短步数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 在古老的魔兽传说中,有两个军团,一个叫天灾,一个叫近卫.在他们所在的地域,有n个隘口,编号为1..n,某些隘口之间是有通道连接的.其中近卫军团在1号隘口,天灾军团在n号隘口.某一天,天灾军团的领袖巫妖王决定派兵攻打近卫军团,天灾军团的部队如此庞大,甚至可以填江过河.但是巫妖王不想付出不必要的代价,他想知道在不修建任何通道的前提下,部队是否

SDUT 2144 图结构练习——最小生成树

题目链接 :http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2144 图结构练习--最小生成树 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 有n个城市,其中有些城市之间可以修建公路,修建不同的公路费用是不同的.现在我们想知道,最少花多少钱修公路可以将所有的城市连在一起,使在任意一城市出发,可以到达其他任意的城市. 输入 输入包含多