HDU 1285 确定比赛名次
确定比赛名次
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 17915 Accepted Submission(s): 7169
N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排
名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定
排名。
其他说明:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前;输入数据保证是正确的,即输入数据确保一定能有一个符合要求的排名。
#include <bits/stdc++.h>
using namespace std;
const int N(+);
vector<int> g[N];
bool vis[N];
int topo[N], tot;
void dfs(int u){
vis[u]=;
for(int i=; i<g[u].size(); i++){
int &v=g[u][i];
if(vis[v]) continue;
dfs(v);
}
topo[--tot]=u;
}
int main(){
for(int n, m; ~scanf("%d%d", &n, &m);){
for(int i=; i<=n; i++) g[i].clear();
for(int u, v; m--;) scanf("%d%d", &u, &v), g[u].push_back(v);
for(int i=; i<=n; i++) sort(g[i].begin(), g[i].end(), greater<int>());
memset(vis, , sizeof(vis)); tot=n;
for(int i=n; i; i--) if(!vis[i]) dfs(i);
printf("%d", topo[]); for(int i=; i<n; i++) printf(" %d", topo[i]); puts("");
}
}
#include <bits/stdc++.h>
using namespace std;
const int N(+);
vector<int> g[N];
int in[N];
int main(){
for(int n, m; ~scanf("%d%d", &n, &m);){
for(int i=; i<=n; i++) g[i].clear();
memset(in, , sizeof(in));
for(int u, v; m--;) scanf("%d%d", &u, &v), g[u].push_back(v), in[v]++;
for(int i=; i<n; )
for(int u=; u<=n; u++){
if(in[u]==){
if(!i++) printf("%d", u);
else printf(" %d", u);
in[u]=-;
for(int j=; j<g[u].size(); j++){
int &v=g[u][j]; in[v]--;
}
break;
}
}
puts("");
}
}
#include <bits/stdc++.h>
using namespace std;
const int N(+);
vector<int> g[N];
int in[N];
typedef pair<int,int> P;
priority_queue<P, vector<P>, greater<P> > que;
int main(){
for(int n, m; ~scanf("%d%d", &n, &m);){
for(int i=; i<=n; i++) g[i].clear();
memset(in, , sizeof(in));
for(int u, v; m--;) scanf("%d%d", &u, &v), g[u].push_back(v), in[v]++;
for(int i=; i<=n; i++) que.push({in[i], i});
bool first=true;
while(!que.empty()){
P top=que.top(); que.pop(); int &u=top.second;
if(in[u]!=top.first) continue;
if(first) printf("%d", u), first=false;
else printf(" %d", u);
for(int i=; i<g[u].size(); i++){
int &v=g[u][i];
que.push({--in[v], v});
}
}
puts("");
}
}
HDU 1285 确定比赛名次的更多相关文章
- 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 确定比赛名次和hdu 4857 逃生)
确定比赛名次 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- HDU 1285 确定比赛名次(简单拓扑排序)
题目链接: 传送门 确定比赛名次 Time Limit: 1000MS Memory Limit: 65536K Description 有N个比赛队(1 Input 输入有若干组,每组中的第 ...
- 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 ...
- [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 确定比赛名次 (topsort)
确定比赛名次Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
随机推荐
- NSDictionary(key与value)
1.key与value关系,用一个key的值控制整个模型 NSDictionary *dic = @{@"channelKey":channelModel,@"chann ...
- Oracle中没有 if exists(...)
对于Oracle中没有 if exists(...) 的语法,目前有许多种解决方法,这里先分析常用的三种,推荐使用最后一种 第一种是最常用的,判断count(*)的值是否为零,如下declare v ...
- JAVA 根据数据库表内容生产树结构JSON数据
1.利用场景 组织机构树,通常会有组织机构表,其中有code(代码),pcode(上级代码),name(组织名称)等字段 2.构造数据(以下数据并不是组织机构数据,而纯属本人胡编乱造的数据) List ...
- [转]Hive/Beeline 使用笔记
FROM : http://www.7mdm.com/1407.html Hive: 利用squirrel-sql 连接hive add driver -> name&example u ...
- Linux 进程与线程一(创建-关闭线程)
进程是一个实体.每一个进程都有他自己的内存地址段(heap,stack等等) 进程是执行中的程序. 程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体. 进程是操作系统中最基 ...
- HTML语义化之常见模块
用合理的HTML标记以及特有的属性去格式化文档内容. 浏览器会根据标签的语义给定一个默认的样式. 判断网页标签语义是否良好的一个简单方法就是:去掉样式,看网页结构是否组织良好有序,是否仍然有很好的可读 ...
- C#中小数点后保留两位小数,四舍五入的函数及使用方法
Math.Round(45.367,2) //Returns 45.37 Math.Round(45.365,2) //Returns 45.36 C#中的Round()不是我 ...
- pandas 修改 DataFrame 列名
问题: 有一个DataFrame,列名为:['$a', '$b', '$c', '$d', '$e'] 现需要改为:['a', 'b', 'c', 'd', 'e'] 有何办法? import pan ...
- Tuple的用法
1经常有些类型只用一次,不想添加新类,可以使用Tuple. 例子: List<Tuple<string, string>> list = new List<Tuple&l ...
- Java系列:国际化(zz)
国际化英文单词为:Internationalization,又称I18N,I为因为单词的第一个字母,18为这个单词的长度,而N代表这个单词的最后一个字母.国际化又称本地化(Localization,L ...