uva10305

题目连接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1246

拓扑排序

lrj167

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<set>
 4 #include<iostream>
 5 #include<cctype>
 6 #include<string>
 7 #include<sstream>
 8 #include<algorithm>
 9 #include<map>
10 #define LL long long
11 using namespace std;
12 const int maxn=110;
13 int u,v;
14 int n,m;
15 int t;
16 int top[maxn],vis[maxn];
17 int p[maxn][maxn];
18 int  dfs(int u)
19 {
20     vis[u]=-1;
21     for(int v=1;v<=n;v++) if(p[u][v])
22     {
23         if(vis[v]<0) return 0;
24         else if(!vis[v]&&!dfs(v)) return 0;
25     }
26     vis[u]=1;
27     top[t--]=u;
28     return 1;
29 }
30 int main()
31 {
32     while(scanf("%d%d",&n,&m)&&(n||m))
33     {
34         memset(p,0,sizeof(p));
35         memset(vis,0,sizeof(vis));
36         for(int i=0;i<m;i++)
37         {
38             scanf("%d%d",&u,&v);
39             p[u][v]=1;
40         }
41         t=n;
42         for(int i=1;i<=n;i++) if(!vis[i])
43             dfs(i);
44         for(int i=1;i<n;i++)
45             printf("%d ",top[i]);
46         printf("%d\n",top[n]);
47     }
48 }
时间: 2024-10-15 20:45:18

uva10305的相关文章

UVA10305 Ordering Tasks(有向无环图排序--toposort) Kahn算法

题目描述:https://vjudge.net/problem/UVA-10305 题目分析: 恨水的题目,只要学了toposort就会做的,大概意思是给你n个变量,m个不等关系表示a<b,问n个数可能的关系;不如举个例子例如n=3表示3个变量我们假如他们是a,b,c现在有两个关系a<b,a<c 那么输出有两种a<b<c或者a<c<b(题目要求输出任意一种); 题目大概就这个意思,那么我们怎么做呢,我们想一想如果把变量看成点,关系看成有向边,那么就得到一个图,这个

6_15 给任务排序(UVa10305)&lt;拓扑排序&gt;

John有n件事情要做,不幸的是这些事情并不是各自独立的,而是有相依性的.换句话说可能有某件事情一定要在另一件事情做完之后才能做.Input每组测试数据可能有好几列.第一列有2个整数n,m.(1 <= n <= 100)n代表共有几件事情要做(编号从1到n),m代表事情之间有几个相依关系存在.接下来的m列每列有2个整数i和j.代表i这件事情一定要在j这件事前被执行.n=m=0时代表输入结束.Output对每组测试数据,请输出n个整数,代表事情被执行的顺序.注:答案可能不是唯一解Sample I

UVA10305 拓扑序

题意:给出多个任务,以及一系列任务的关系表示某个任务必须在某个任务前完成,问一个合理的任务完成顺序 拓扑序的裸题,一开始用大白书的写法,后来发现并不好用,就换了BFS又A了一遍. 原: 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 const int maxm=105; 6 7 int vis[maxm],topo[maxm],t; 8 in

拓扑排序--UVa10305

题目 Output: standard output Time Limit: 1 second Memory Limit: 32 MB John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task is only possible if other tasks have already been executed. Input The input will co

UVa10305 Ordering Tasks (拓扑排序)

链接:http://acm.hust.edu.cn/vjudge/problem/19494分析: 题目中n个变量看成图中n个结点,图中的边即是二元关系,m个二元组就代表了这m条边表示的二元关系,(u,v)表示v大于u,从u向v连一条有向边,如果这m个二元组不矛盾,那么这个图便是一个DAG否则就存在一个有向环,解便不存在了,举个栗子a<b,b<c,可以推出a<c,但是现在出现了c连到了a意思是a>c,与之前的递推相悖,所以如果图中存在有向环,则不存在拓扑序,反之一个DAG图就存在拓

UVA10305 Ordering Tasks

一个很裸的拓扑排序题目,只是因为很久没有复习toposort,所以拿来复习一下,最近几天要把图论的经典算法都复习一遍. #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <algorithm> #include <cmath>

UVA10305 Ordering Tasks【DFS】【拓扑排序】

Ordering Tasks Input: standard input Output: standard output Time Limit: 1 second Memory Limit: 32 MB John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task is only possible if other tasks have already been

图——拓扑排序(uva10305)

John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task is only possible if other tasks have already been executed. Input The input will consist of several instances of the problem. Each instance begins with

拓扑排序(Topological Order)UVa10305 Ordering Tasks

2016/5/19 17:39:07 拓扑排序,是对有向无环图(Directed Acylic Graph , DAG )进行的一种操作,这种操作是将DAG中的所有顶点排成一个线性序列,使得图中的任意一对顶点u,v满足如下条件: 若边(u,v)∈E(G),则在最终的线性序列中出现在v的前面 好了,说人话:拓扑排序的应用常常和AOV网相联系,在一个大型的工程中,某些项目不是独立于其他项目的,这意味着这种非独立的项目的完成必须依赖与其它项目的完成而完成,不妨记为u,v,则若边(u,v)∈E(G),代

UVA10305 拓扑排序

网址:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=117863#problem/B 思路分析:裸的拓扑排序,注释在代码中. 代码: #include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <queue>#include <stack>#include <ve