正向与反向拓扑排序的区别(hdu 1285 确定比赛名次和hdu 4857 逃生)
确定比赛名次
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 16 Accepted Submission(s) : 9
逃生
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 20 Accepted Submission(s) : 9
现在有n个人,从1标号到n。同时有一些奇怪的约束条件,每个都形如:a必须在b之前。
同时,社会是不平等的,这些人有的穷有的富。1号最富,2号第二富,以此类推。有钱人就贿赂负责人,所以他们有一些好处。
负责人现在可以安排大家排队的顺序,由于收了好处,所以他要让1号尽量靠前,如果此时还有多种情况,就再让2号尽量靠前,如果还有多种情况,就让3号尽量靠前,以此类推。
那么你就要安排大家的顺序。我们保证一定有解。
5 10
3 5
1 4
2 5
1 2
3 4
1 4
2 3
1 5
3 5
1 2
1 2
2 3
4 3
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define me(a,b) memset(a,b,sizeof(a))
#define N 5100
typedef long long ll;
using namespace std; int in[N],head[N],n,m,cnt,s,e;
priority_queue<int,vector<int>,greater<int> > q;
vector<int> ans; struct co
{
int e,pre;
}mp[N]; void init()
{
me(head,-);
cnt=;
me(in,);
while(!q.empty())
q.pop();
ans.clear();
} void add(int ss,int ee)
{
mp[cnt].e=ee;
mp[cnt].pre=head[ss];
head[ss]=cnt++;
} int main()
{
//freopen("in.txt","r",stdin);
while(~scanf("%d%d",&n,&m))
{
init();
while(m--)
{
scanf("%d%d",&s,&e);
in[e]++;
add(s,e);
}
for(int i=;i<=n;i++)
{
if(in[i]==)
{
q.push(i);
}
}
while(!q.empty())
{
int f=q.top();
ans.push_back(f);
q.pop();
for(int i=head[f]; i!=-; i=mp[i].pre)
{
in[mp[i].e]--;
if(in[mp[i].e]==)
{
q.push(mp[i].e);
}
} }
for(int i=;i<ans.size();i++)
{
if(i)
cout<<' ';
cout<<ans[i];
}
cout<<endl;
}
}
4857:
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define me(a,b) memset(a,b,sizeof(a))
#define N 100010
typedef long long ll;
using namespace std; int in[],head[N],n,m,cnt,s,e;
priority_queue<int> q;
vector<int> ans; struct co
{
int e,pre;
}mp[N]; void init()
{
me(head,-);
me(in,);
cnt=;
while(!q.empty())
q.pop();
ans.clear();
} void add(int ss,int ee)
{
mp[cnt].e=ee;
mp[cnt].pre=head[ss];
head[ss]=cnt++;
} int main()
{
//freopen("in.txt","r",stdin);
int T;
cin>>T;
while(T--)
{
init();
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%d%d",&s,&e);
in[s]++;
add(e,s);
}
for(int i=;i<=n;i++)
{
if(in[i]==)
{
q.push(i);
}
}
while(!q.empty())
{
int f=q.top();
ans.push_back(f);
q.pop();
for(int i=head[f]; i!=-; i=mp[i].pre)
{
in[mp[i].e]--;
if(in[mp[i].e]==)
{
q.push(mp[i].e);
}
} }
for(int i=ans.size()-;i>-;i--)
{
cout<<ans[i];
if(i)
cout<<' ';
}
cout<<endl;
}
}
正向与反向拓扑排序的区别(hdu 1285 确定比赛名次和hdu 4857 逃生)的更多相关文章
- ACM: HDU 1285 确定比赛名次 - 拓扑排序
HDU 1285 确定比赛名次 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u De ...
- HDU.1285 确定比赛名次 (拓扑排序 TopSort)
HDU.1285 确定比赛名次 (拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 只不过这道的额外要求是,输出字典序最小的那组解.那么解决方案就是 ...
- hdu 1285 确定比赛名次 拓扑排序
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛 ...
- HDU 1285 确定比赛名次(拓扑排序模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 题目大意:有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行 ...
- HDU 1285 确定比赛名次(拓扑排序)题解
Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委 ...
- [ACM] hdu 1285 确定比赛名次 (拓扑排序)
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- hdu 1285 确定比赛名次 (拓扑)
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- HDU 1285 确定比赛名次
传送门 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 题解报告:hdu 1285 确定比赛名次
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 Problem Description 有N个比赛队(1<=N<=500),编号依次 ...
随机推荐
- C#使用AppDomain时的异常分析:Object ‘XXXX.rem’ has been disconnected or does not exist at the server.
在使用C#的应用程序域的时候,碰到这么一个异常: System.Runtime.Remoting.RemotingException: Object ‘/76e7cd41_2cd2_4e89_9c03 ...
- mybatis关于ORM的使用以及设计(二)[DaoInterface 转换 Mapper代理对象]
第一节中,分析了Mybatis的ORM框架的初始化,这篇来分析SQL执行过程中,对象->SQL是如何转换的 其中包含两种映射思想 ①DAO接口->Mapper实例 ②执行DAO的方法时,参 ...
- 超级简单的Memcache入门
Memcache 就是一个数据库,将数据保存在内存中 常用于缓存服务器,保存操作频繁,丢失无所谓的数据 启动选项 -d 是一个守护进程 -m 内存分配 -u 用户 -l 监听地址 -p 端口 -c 最 ...
- MapReduce论文学习
MapReduce和区块链有什么相同的地方? 我的天哪,他俩还有相同的地方呢.我书读的少,你别骗我. 他俩还真有相同点,绝不忽悠. 他俩都有一个高大上的名字. 区块链就是一个分布式数据库,并不是什么神 ...
- ES6 实战项目构建 ES6+glup+express
ES6推出已经有几个年头了,平时也有学过一些基本语法,无奈实践经验太少.而且前端早已脱离了刀耕火种的时代,一些自动化构建工具像gulp.webpack等也需要熟练掌握.最近刚签了三方,闲暇之余就找了个 ...
- Vue 路由的模块化
其实就是对路由配置和实例化的过程进行js封装,挂载路由的时候依然在main.js中: 步骤: 1.在src文件夹下新建一个router文件夹,在router文件夹下新建文件router.js; 2.引 ...
- 小程序[publib]:1 request:fail ssl hand shake error 如果用的是阿里云和宝塔那么如下解决
小程序[publib]:1 request:fail ssl hand shake error 如果用的是阿里云和宝塔那么如下解决 宝塔里面的站点SSL右侧的配置(PEM格式) 需要把 阿里云 下载的 ...
- IntelliJ IDEA 破解Jrebel6.3.0安装
首先下载所必要的两个文件(jrebel3.6.0和cracked文件) 密码:pvsd 注意:如果不是该版本的Jrebel该破解文件可能无效. 步骤1:安装 解压文件得出两个压缩包 在idea中选择 ...
- python 匿名函数&内置函数
匿名函数:为了解决那些功能很简单的需求而设计的一句话函数怎么定义匿名函数: cal = lambda x : x*x # cal是函数名,lambda是定义匿名函数的关键字 冒号前面的额x是参数即函数 ...
- python中网络编程之线程
网络编程之线程 什么是线程? 程序的执行线路.每个进程默认有一条线程.线程包含了程序的具体步骤. 多线程就是一个进程中有除主线程(默认线程)外还有多个线程. 线程与进程的关系(进程包含线程,而线程依赖 ...