七天使的通訊

2022-07-13 20:48:27 字數 1286 閱讀 3405

n個天使排成一條直線,某些天使之間需要互相聯絡,他們之間的通訊可以通過黑白兩種通道中的一種;所有通道

必須在直線同側(另一側是地面);為了保證通訊效率,同種顏色的所有通道之間不能相交。請計算能否建立這種

通訊方案。

input

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

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

接下來有m行,每行兩個數a、b,表示a、b兩個天使需要通訊。

1<=n<=5000,1<=m<=1000,1<=t<=10,1<=a<=n,1<=b<=n

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

output

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

sample input

17 5

1 32 7

3 47 4

6 5

sample output

sane

【提示】

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

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

將每個通道設為乙個節點,先暴力判斷每兩條通道如果是同種顏色會不會相交,如果會相交就在這兩個節點之間連無向邊,說明它們不能為同種顏色(必須在二分圖兩邊)。然後對組成的無向圖進行二分圖判定(dfs染色),如果染色成功說明該圖是乙個二分圖,即有解,否則無解。

#include #include #include #include using namespace std;

const int maxn=1005,maxk=1000005;

int n,m,ca,color[maxn],tot,now[maxn],prep[maxk],son[maxk],wi[maxn][2];

bool bo;

void add(int x,int y)

void dfs(int x,int y)

else

if (color[x]==color[so]) bo=0;

}}int main()

int a,b,c,d;

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

}memset(color,-1,sizeof(color));

for (int i=1;i<=m;i++) if (color[i]==-1) dfs(i,1);

if (bo==1) puts("sane");

else puts("non");

}return 0;

}

七天使的通訊

題目描述 n個天使排成一條直線,某些天使之間需要互相聯絡,他們之間的通訊可以通過黑白兩種通道中的一種 所有通道必須在直線同側 另一側是地面 為了保證通訊效率,同種顏色的所有通道之間不能相交。請計算能否建立這種通訊方案。輸入 第一行乙個數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...