七天使的通訊

2021-07-22 11:43:48 字數 1762 閱讀 4578

題目描述

n個天使排成一條直線,某些天使之間需要互相聯絡,他們之間的通訊可以通過黑白兩種通道中的一種;所有通道必須在直線同側(另一側是地面);為了保證通訊效率,同種顏色的所有通道之間不能相交。請計算能否建立這種通訊方案。

輸入 第一行乙個數t,表示接下來有t個詢問。

對於每個詢問:第一行兩個數n,m,分別表示有n個天使、需要建立通訊線路的天使有m對;接下來有m行,每行兩個數a、b,表示a、b兩個天使需要通訊。

輸出 對於每個詢問,輸出一行「sane」表示有可行方案、「non」表示無解

樣例輸入

1 7 5

1 3

2 7

3 4

7 4

6 5

樣例輸出

sane

提示 【樣例解釋】

樣例中共有乙個詢問。

在(1,3)、(4,7)、(5,6)之間連黑色通道,在(2,7)、(3,4)之間連白色通道,每條通道都成功建立,且同種顏色的通道沒有相交,所以輸出sane。

【資料規模和約定】

對於 20%的資料,

1<=

n<=50,

1<=

m<=

15

對於 50%的資料,

1<=

n<=

1000,1

<=

m<=

300

對於 100%的資料,

1<=

n<=

5000,1

<=

m<=

1000,1

<=

t<=10,

1<=

a<=n,

1<=

b<=n

資料保證每對(a,b)不重複,且a不等於b

【提示】

當兩條線路有一對相同的端點時,這兩條線路不相交。

也就是說,對於線路(a,b)和線路(c,d)(

a

c<

d ),當且僅當

a<

c

<

a<

d<

b 時這兩條線路相交。 m2

預處理出線路之間是否相反的關係,然後直接上關係類並查集。

#include

#include

#include

#include

using

namespace

std;

int t,n,m,u,v,ans;

int a[1005],b[1005],p[1005][1005],f[1005],dis[1005];

int get(int x)

int main()

for(int i=1;i<=m;i++)

for(int j=1;j<=m;j++) p[i][j]=0;

for(int i=1;i<=m;i++)

}for(int i=1;i<=m;i++) f[i]=i,dis[i]=0;

for(int i=1;i<=m;i++)

for(int j=1;j<=m;j++)

if(p[i][j])

}ans=1;

for(int i=1;i<=m;i++)

for(int j=1;j<=m;j++)

if(p[i][j])

if(ans) cout

<

cout

<

0;}

七天使的通訊

n個天使排成一條直線,某些天使之間需要互相聯絡,他們之間的通訊可以通過黑白兩種通道中的一種 所有通道 必須在直線同側 另一側是地面 為了保證通訊效率,同種顏色的所有通道之間不能相交。請計算能否建立這種 通訊方案。input 第一行乙個數t,表示接下來有t個詢問。對於每個詢問 第一行兩個數n,m,分別...

9106 天使的起誓

time limit 10 second memory limit 2 mb 問題描述 tenshi非常幸運的被選為掌管智慧型之匙的天使。在正式任職之前,她必須和其他新當選的天使一樣,要宣誓。宣誓儀式是每位天使各自表述自己的使命,她們的發言稿被放在n個呈圓形排列的寶盒中。這些寶盒按順時針方向被編上號...

日曆七天展示

public listgettimeinterval date date system.out.println 要計算日期為 sdf.format cal.gettime 輸出要計算日期 設定乙個星期的第一天,按中國的習慣乙個星期的第一天是星期一 cal.setfirstdayofweek cale...