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...