題目描述
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...