確定比賽名次(簡單的拓撲排序)
確定比賽名次
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--確定比賽名次【拓撲排序 && 鄰接表實現】
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