Day4 - G - 确定比赛名次 HDU - 1285
Input输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示队伍的个数,M表示接着有M行的输入数据。接下来的M行数据中,每行也有两个整数P1,P2表示即P1队赢了P2队。
Output给出一个符合要求的排名。输出时队伍号之间有空格,最后一名后面没有空格。
其他说明:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前;输入数据保证是正确的,即输入数据确保一定能有一个符合要求的排名。
Sample Input
4 3
1 2
2 3
4 3
Sample Output
1 2 4 3 思路:直接拓扑排序即可,输出要求字典序最小,那么DFS就不行,无法保证字典序,直接上优先队列,代码如下:
插一手DFS代码(无字典序)
const int maxm = ; int G[maxm][maxm], vis[maxm], N, M;
vector<int> ans; bool dfs(int x) {
vis[x] = -;
for (int i = ; i <= N; ++i) {
if(G[x][i]) {
if(vis[i] == -)
return false;
if(!vis[i] && !dfs(i))
return false;
}
}
vis[x] = ;
ans.push_back(x);
return true;
} int main() {
while(scanf("%d%d",&N,&M) != EOF) {
memset(G, , sizeof(G)), ans.clear(), memset(vis, , sizeof(vis));
for (int i = ; i < M; ++i) {
int t1,t2;
scanf("%d%d", &t1, &t2);
G[t1][t2] = ;
}
for(int i = ; i <= N; ++i)
if(!vis[i])
if(!dfs(i))
break;
int cnt = ;
for (auto i = ans.rbegin(); i != ans.rend(); ++i) {
if(cnt++)
printf(" ");
printf("%d", *i);
if(cnt == N)
break;
}
}
return ;
}
AC代码:
const int maxm = ; int N, M, in[maxm], G[maxm][maxm], ans[maxm], cnt; struct Node {
int id;
Node(int _id) : id(_id){} bool operator<(const Node &a) const {
return a.id < id;
}
}; int main() {
while(scanf("%d%d", &N, &M) != EOF) {
memset(in, , sizeof(in)), memset(G, , sizeof(G)), cnt = ;
for (int i = ; i < M; ++i) {
int t1, t2;
scanf("%d%d", &t1, &t2);
if(!G[t1][t2]) {
G[t1][t2] = ;
in[t2]++;
}
}
priority_queue<Node> q;
for (int i = ; i <= N; ++i) {
if(!in[i])
q.push(Node(i));
}
while(!q.empty()) {
Node p = q.top();
q.pop();
int u = p.id;
ans[cnt++] = u;
for (int i = ; i <= N; ++i) {
if(G[u][i]) {
if(!--in[i])
q.push(Node(i));
}
}
}
for(int i = ; i < N; ++i) {
if(i)printf(" ");
printf("%d", ans[i]);
}
printf("\n");
}
return ;
}
注意读入判重,否则会影响入度的计算。
Day4 - G - 确定比赛名次 HDU - 1285的更多相关文章
- (拓扑)确定比赛名次 -- hdu -- 1285
http://acm.hdu.edu.cn/showproblem.php?pid=1285 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memo ...
- 确定比赛名次 HDU - 1285 (拓扑排序)
注意点: 输入数据中可能有重复,需要进行处理! #include <stdio.h> #include <iostream> #include <cstring> ...
- 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 oj 1285 确定比赛名次
hdu oj 1285 确定比赛名次 题目: 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- HDU 1285 确定比赛名次
传送门 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 正向与反向拓扑排序的区别(hdu 1285 确定比赛名次和hdu 4857 逃生)
确定比赛名次 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- 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 Submis ...
随机推荐
- 第五周之Hadoop学习(五)
在上周已经完成Hadoop的Java编程环境下的配置,这周则是通过对Eclipse的环境编程对Hadoop的API进行简单的调用 参考地址:https://blog.csdn.net/u0105237 ...
- Java 并发锁
Java 中的锁 阻塞锁.可重入锁.读写锁.互斥锁.悲观锁.乐观锁.公平锁.偏向锁.对象锁.线程锁.锁粗化.锁消除.轻量级锁.重量级锁.信号量.独享锁.共享锁.分段锁 一.常见的锁 synchroni ...
- 3_01_MSSQL课程_Ado.Net_连接数据库
1. Ado.Net 是一组微软的c#操作数据库的类库. 2.开发人员将界面上的数据(用户的操作和输入的数据)存储到数据库当中.. 3.数据库访问的驱动.即:应用程序和数据库的桥梁. 4.驱动层. S ...
- Mate Linux 桌面的什么受GNOME 2 粉丝喜欢 ?
导读 如果你以前听过这个传闻:当 GNOME3 第一次发布时,很多 GNOME 用户还没有准备好放弃 GNOME 2. Mate(以马黛茶yerba mate植物命名)项目的开始是为了延续 GNOME ...
- 【PAT甲级】1010 Radix (25 分)(二分)
题意: 输入两个数可能包含小写字母,1或者2,进制大小.第三个数为代表第一个数是第四个数进制的,求第二个数等于第一个数时进制的大小,不可能则输出Impossible,第三个数为2代表第二个数是第四个数 ...
- Android 学习笔记四:创建工具栏按钮
原文:http://blog.csdn.net/lihongxun945/article/details/48951199 前面我们已经可以在一个Activity中添加一些按钮之类的组件.由于手机的屏 ...
- 劫后余生--New Start
被搁置的计划 It was the best of times,it was the worst of times,it was the age of wisidom,it was the age o ...
- 「CF126B」Password
题目描述 给定一个字符串 \(S\),我们规定一个字符串 \(P\) 是可行解,\(P\) 需要满足: \(P\) 是 \(S\) 的前缀 \(P\) 是 \(S\) 的后缀 \(P\) 出现在 \( ...
- Lesson 8 Trading standards
What makes trading between rich countires difficult? Chickens slautered in the United States, claim ...
- SqlCommand的ExecuteReader方法----转载
SqlCommand的ExecuteReader方法 原创 小道 2018-08-28 17:32:01 阅读 1353 次 评论 0 条 摘要: 用于执行查询语句,并返回一个DataReader ...