UVA10305 拓扑序
题意:给出多个任务,以及一系列任务的关系表示某个任务必须在某个任务前完成,问一个合理的任务完成顺序
拓扑序的裸题,一开始用大白书的写法,后来发现并不好用,就换了BFS又A了一遍。
原:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxm=; int vis[maxm],topo[maxm],t;
int head[maxm],point[maxm*maxm],nxt[maxm*maxm],size; void add(int a,int b){
point[size]=b;
nxt[size]=head[a];
head[a]=size++;
} bool dfs(int s){
vis[s]=-;
for(int i=head[s];~i;i=nxt[i]){
int j=point[i];
if(vis[j]==-)return ;
if(!vis[j]&&!dfs(j))return ;
}
vis[s]=;
topo[t--]=s;
return ;
} bool toposort(int n){
t=n;
memset(vis,,sizeof(vis));
for(int i=;i<=n;++i){
if(!vis[i]){
if(!dfs(i))return ;
}
}
return ;
} int main(){
int n,m;
while(scanf("%d%d",&n,&m)!=EOF&&n+m){
memset(head,-,sizeof(head));
size=;
for(int i=;i<=m;++i){
int a,b;
scanf("%d%d",&a,&b);
add(a,b);
}
toposort(n);
for(int i=;i<=n;++i){
printf("%d",topo[i]);
if(i==n)printf("\n");
else printf(" ");
}
}
return ;
}
BFS:
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std; int ma[][],id[],n; void init(){
memset(ma,,sizeof(ma));
memset(id,,sizeof(id));
} void topo(){
queue<int>q;
for(int i=;i<=n;++i)if(!id[i])q.push(i);
int cnt=;
while(!q.empty()){
int u=q.front();
q.pop();
printf("%d",u);
if(++cnt==n)printf("\n");
else printf(" ");
for(int i=;i<=n;++i)if(ma[u][i]){
id[i]--;
if(!id[i])q.push(i);
}
}
} int main(){
int m;
while(scanf("%d%d",&n,&m)!=EOF&&n+m){
init();
while(m--){
int a,b;
scanf("%d%d",&a,&b);
if(!ma[a][b]){
ma[a][b]=;
id[b]++;
}
}
topo();
}
return ;
}
UVA10305 拓扑序的更多相关文章
- 【BZOJ-3832】Rally 拓扑序 + 线段树 (神思路题!)
3832: [Poi2014]Rally Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 168 Solved: ...
- BZOJ-4010 菜肴制作 贪心+堆+(拓扑图拓扑序)
无意做到...char哥还中途强势插入干我...然后据他所言,看了一会题,一转头,我爆了正解....可怕 4010: [HNOI2015]菜肴制作 Time Limit: 5 Sec Memory L ...
- hdu5438(2015长春赛区网络赛1002)拓扑序+DFS
题意:给出一张无向图,每个节点有各自的权值,问在点数为奇数的圈中的点的权值总和是多少. 通过拓扑序的做法标记出所有非圈上的点,做法就是加每条边的时候将两点的入度都加一,然后将所有度数为1的点入队,删去 ...
- poj3553 拓扑序+排序贪心
题意:有多个任务,每个任务有需要花费的时间和最后期限,任务之间也有一些先后关系,必须先完成某个才能开始某个,对于每个任务,如果没有越期,则超时为0,否则超时为结束时间-最后期限,求总超时时间最小的任务 ...
- poj2762 强连通+拓扑序
题意:有 n 个房间,不同房间之间有单向通道,问是否任意两个房间 A .B 都可以从 A 到 B 或从 B 到 A(有一条有就可以). 在这题中,如果一些点是在同一个强连通分量中,那么这些点肯定能够相 ...
- poj1420 拓扑序
题意:给出一个表格,一部分单元格是给定的数字,而另一部分单元格则是一个式子,表示是其他一些单元格的和,让你输出最后计算出的所有格子的数. 因为有些格子需要其他格子先计算出来,所以计算顺序是按照拓扑序的 ...
- poj1270 拓扑序(DFS)
题意:给出将会出现的多个字母,并紧接着给出一部分字母的大小关系,要求按照字典序从小到大输出所有符合上述关系的排列. 拓扑序,由于需要输出所有排列,所以需要使用 dfs ,只要点从小到大遍历就可以实现字 ...
- poj1128 拓扑序(DFS)
题意:给出一张图,它是由一系列字母框按一定顺序从下到上摆放,因此上面的字母框会覆盖一部分下面的字母框,确保每个字母框的四条边都至少会出现一个点,要求输出所有可行的摆放顺序,字典序从小到大输出. 首先可 ...
- poj3687 拓扑序
题意:有编号 1-n 的球,每个球的质量不同,质量从 1 到 n 不等,给出一系列比较,分别是两个编号的球的大小关系,求一个序列满足上述关系,并且从编号 1 开始依次选择可选的最小质量,输出每个球的质 ...
随机推荐
- Quartz之CronExpression
一 Cron Expression 的格式 Quartz的cronExpression见官网文档说明: http://www.docjar.com/docs/api/org/quartz/CronEx ...
- [转]centos7 配置yum源(本地+光盘)
from:http://wangyan.org/blog/setup-local-yum-repo.html 一,本地 1.创建本地yum仓库 1.mkdir -p /yum/local #可以有N级 ...
- Access 中数据库操作时提示from子句语法错误
问题:如果在Access 中数据库操作时提示from子句语法错误原因:语句中某一单词为Access中的关键字.如:select * from user.其中user就是一关键字.解决:用中括号[]将其 ...
- springmvc----struts2比较
method=requestMethod.GETorPOST vs addInput+add 用抛异常处理密码验证和用户名重复与否验证 +js303 @validate 判断输入格式(jque ...
- dom添加事件
1.语法:document.getElementById('btn').addEventListener 2.可以添加多个EventListener,且不会覆盖 3.移除EventListener, ...
- 2013年8月份第4周51Aspx源码发布详情
迷你桌面闹钟源码 2013-8-27 [VS2010]功能介绍:实现了定时闹钟的功能,可以设置闹钟最前端显示.感兴趣的可以下载学习. BR个人博客系统(课程设计)源码 2013-8-27 [VS2 ...
- 使用busybox构建根文件系统
当我们在Qemu上运行起来自己编译的内核之后,需要使用busybox构建一个文件系统,将此文件系统挂载上去就可以使用busybox提供的各种命令了. 1.编译安装busybox 源码下载地址:http ...
- ajax 提交成功页面跳转问题
jsx/ajax提交成功后采用以下方式跳转:1.本页面跳转:"window.location.href"."location.href" 2.上一层页面跳转:& ...
- PHP中使用mysql处理结果集
一.从结果集中将记录取出 mysql_fetch_row($result); 从结果集中取得一行作为枚举数组 mysql_fetch_row($result mysql_fetch_assoc( ...
- stdobj to array php
The lazy one-liner method You can do this in a one liner using the JSON methods if you're willing to ...