1. 程式人生 > >確定比賽名次(簡單的拓撲排序)

確定比賽名次(簡單的拓撲排序)

確定比賽名次
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 505 Accepted Submission(s): 253

Problem Description
有N個比賽隊(1<=N<=500),編號依次為1,2,3,。。。。,N進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即P1贏P2,用P1,P2表示,排名時P1在P2之前。現在請你程式設計序確定排名。

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

真的想吐槽一下 語文沒學好真的是好無力 沒參加比賽的可能比參加比賽的排名還要靠前(之前我一直忽略掉了這一點所以一直WA) 最後卡嗎了別人的 說這種情況…..然後就AC了
本題就是一個簡單的拓撲排序
首先找到入度為0的點 並把他們全部塞入set容器裡面 然後訪問set容器裡面的元素 用一個變數 p來儲存 然後在遍歷p的手下敗將 然後在讓他們的入度– 並判斷其入度是否為0 入度為0則塞進set容器裡面

#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<stdlib.h>
#include<vector>
#include<stack>
#include<set>

using namespace std;
bool mycmp(int a,int b)
{
    return a>b;
}
int indegree[507
]; int main() { int n,m; while(cin>>n>>m) { if(m<=0) continue; vector <int> mm[504];//暫存其手下敗將 int flag[504]; set<int> nn;//暫時存放入度為0的頂點 memset(indegree,0,sizeof(indegree)); for(int i =0;i<m;i++) { int w,l; cin>>w>>l; mm[w].push_back(l);//將其歸到w裡面 indegree[l]++;//頂點l的入度+1 } for(int i = 1;i<=n;i++) if(indegree[i]==0) nn.insert(i);//將他們壓入set while(nn.size()) { int p = *nn.begin(); nn.erase(p); for(int i =0;i<mm[p].size();i++)//遍歷自己的手下敗將 { indegree[mm[p][i]]--; if(indegree[mm[p][i]]==0)//將入度為0的點放入set集合裡面 { nn.insert(mm[p][i]); } } mm[0].push_back(p);//把點p直接去掉 } cout<<mm[0][0]; for(int i =1;i<mm[0].size();i++) cout<<" "<<mm[0][i]; cout<<endl; } return 0; }

相關推薦

HDU 1285--確定比賽名次排序 &amp;&amp; 鄰接表實現】

eat priority tex eof greate topsort -- str spa 確定比賽名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/

杭電ACM1285----確定比賽名次排序

sizeof color scan class logs 優先隊列 nbsp pop -- 1 //裸拓撲排序,註意先輸出比較小的數,使用優先隊列即可 2 #include <cstdio> 3 #include <vector> 4 #i

HDU 1285 確定比賽名次排序模板)

href 正在 ios dfs als 結束 top 查找 names 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 題目大意:有N個比賽隊(1<=N<=500),編號依次為1,2,3,。。。。,N進行

HDU 1285 確定比賽名次排序基礎題)

個數 排名 有向無環圖 沒有 left php 輸出 編號 整數 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 題目: 有N個比賽隊(1<=N<=500),編號依次為1,2,3,。。。。,N進行比賽,

杭電 1285 確定比賽名次排序

hdu -h 整數 click tro hit pro set 接下來 http://acm.hdu.edu.cn/showproblem.php?pid=1285

確定比賽名次排序基本例題)

!= 節點 text ring spl RM TP tran ret Description 有N個比賽隊(1<=N<=500),編號依次為1,2,3,。。。。,N進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判

【HDOJ 1285】確定比賽名次排序+優先隊列)

依次 ron put == pop pty fin gre back Problem Description有N個比賽隊(1<=N<=500),編號依次為1,2,3,。。。。,N進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不

確定比賽名次排序模板題)

確定比賽名次 有N個比賽隊(1<=N<=500),編號依次為1,2,3,。。。。,N進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即P1贏P2,用P1,P2表示,排名時P1在P2之前。現在

I - 確定比賽名次排序

有N個比賽隊(1<=N<=500),編號依次為1,2,3,。。。。,N進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即P1贏P2,用P1,P2表示,排名時P1在P2之前。現在請你程式設計序確定

HDU 1285 確定比賽名次排序

題意:共N個隊伍,給出M個比賽結果,即u和v比賽,u勝v。求最終的比賽名次,若無法確定優先的,隊伍號小的優先。 思路:裸拓撲排序。 拓撲排序:每次取入度為0的點為優先的點,取出後,刪除該點所連線的邊,重複操作直至所有點取完。 程式碼:(佇列維護可能快一

HDU-1285-確定比賽名次排序

拓撲排序 #include "bits/stdc++.h" using namespace std; // 用來存某個點的入度數量 int num[505]; // 用來存某個節點的出度 set<int> outde[505]; int ans[505]; priority_

確定比賽名次排序

有N個比賽隊(1<=N<=500),編號依次為1,2,3,。。。。,N進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即P1贏P2,用P1,P2表示,排名時P1在P2之前。現在請

HDU 1285 確定比賽名次排序大頂堆)

條件 its nbsp 行為 acm auth gre tom while Problem Description 有N個比賽隊(1<=N<=500),編號依次為1,2,3,。。。。,N進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁

確定比賽名次(簡單排序)

確定比賽名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 505 Accepted Submiss

牛客寒假算法基礎集訓營3---B----處女座的比賽資格(排序處理有負邊的最短路)

man 接下來 pan style src sub 報銷 != type 鏈接:https://ac.nowcoder.com/acm/contest/329/B來源:牛客網 時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 262144K,其他語言5

hdu1285確定比賽名次(最簡單排序)

Input 輸入有若干組,每組中的第一行為二個數N(1<=N<=500),M;其中N表示隊伍的個數,M表示接著有M行的輸入資料。接下來的M行資料中,每行也有兩個整數P1,P2表示即P1隊贏

hdu1285確定比賽名次(排序+優先佇列)

傳送門 第一道拓撲排序題 每次刪除入度為0的點,並輸出 這題要求隊名小的排前面,所以要用到過載的優先佇列 1 #include<bits/stdc++.h> 2 using namespace std; 3 priority_queue<int,vec

確定比賽名次(hdu-1285)(排序佇列實現)

分析: 就是找出是否存在拓撲排序。 每次從該集合中取出(沒有特殊的取出規則,隨機取出也行,使用佇列/棧也行,下同)一個頂點,將該頂點放入儲存結果的List中。 緊接著迴圈遍歷由該頂點引出的所有邊,

POJ 1094 Sorting It All Out(排序+判環+路徑唯一性確定

ons esc def input miss with con nts following Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissi

Sorting It All Out (排序)(能否確定字母排序

An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to large