5799線段(拓撲排序)

2021-08-16 05:37:28 字數 1098 閱讀 2074

數軸上有 n 條線段,第 i 條線段的左端點是 a[i],右端點是 b[i]。 bob 發現 1~2n 共 2n 個整數點,每個點都是某條線段的端點。 這些線段有如下兩類特點:

1 x y,表示第 x 條線段和第 y 條線段相交(相交在這裡指至少有乙個公共點)

2 x y,表示第 x 條線段在第 y 條線段的左邊,且它們不相交。 共有 m 個特點,每個特點都是如上兩類之一。

bob 想通過這些特點推理得到每條線段的端點。

第一行兩個正整數 n,m

接下來 m 行,每行三個正整數,描述線段的特點,格式見題目描述

輸出n行,第i行兩個正整數,用空格隔開,分別是a[i]和b[i]可能有多種答案,輸出字典序最小的答案。即先要求a[1]最小,若仍有多解再要求b[1]最小,若仍有多解再要求a[2]最小,若仍有多解再要求b[2]最小,若仍有多解再要求a[3]最小……

如果無解輸出「wrong」(不輸出引號)。

3 2

1 2 3

2 1 3

1 2

3 54 6

對於 30%的資料, 1<=n,m<=10 

對於 60%的資料, 1<=n,m<=1000 

對於 100%的資料,1<=n,m<=100000

2018山東冬令營

x與y相交說明a[x]#include#include#include#includeusing namespace std;

typedef long long ll;

const int inf=0x3f3f3f3f;

int n,m,s;

vectorp[200005];

int sum[200005],a[200005],vis[200005];

void topo(){

priority_queue,less>q;

for(int i=1;i<=2*n;i++)

if(sum[i]==0)

q.push(i);

while(!q.empty()){

int t=q.top();

q.pop();

a[t]=s--;

for(int i=0;i

python 拓撲排序 Python 拓撲排序

python 拓撲排序 在圖論中,由乙個有向無環圖的頂點組成的序列,當且僅當滿足下列條件時,稱為該圖的乙個拓撲排序 英語 topological sorting 每個頂點出現且只出現一次 若a在序列中排在b的前面,則在圖中不存在從b到a的路徑。print 拓撲排序結果 g.topologicalso...

python 排序 拓撲排序

在電腦科學領域中,有向圖的拓撲排序是其頂點的先行排序,對於每個從頂點u到頂點v的有向邊uv,在排序的結果中u都在v之前。如果圖是有向無環圖,則拓撲排序是可能的 為什麼不說一定呢?圖論 是組合數學的乙個分支,它和其他分支比如 群論 拓撲學 矩陣論有著密切的關係。圖是圖論的主要研究物件。圖是由若干給定的...

學術篇 2 28測試T2 線段 拓撲排序

題目 思路 看到這種找前後的題目.第一反應就是拓撲排序 每條線段都有左右兩個端點咯,然後就亂搞吧.我們用 i 和 i 分別表示第 i 條線段的左右端點.然後如果 x 在 y 的左邊,那麼 x 一定小於 y 我們就建一條 x y 的邊 如果 x 與 y 相交,那麼一定 x且 y 顯然 我們就分別建 x...