nyist 一笔画问题
生活随笔
收集整理的這篇文章主要介紹了
nyist 一笔画问题
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目描述
zyc從小就比較喜歡玩一些小游戲,其中就包括畫一筆畫,他想請(qǐng)你幫他寫一個(gè)程序,判斷一個(gè)圖是否能夠用一筆畫下來(lái)。
規(guī)定,所有的邊都只能畫一次,不能重復(fù)畫。
?
輸入
第一行只有一個(gè)正整數(shù)N(N<=10)表示測(cè)試數(shù)據(jù)的組數(shù)。每組測(cè)試數(shù)據(jù)的第一行有兩個(gè)正整數(shù)P,Q(P<=1000,Q<=2000),分別表示這個(gè)畫中有多少個(gè)頂點(diǎn)和多少條連線。(點(diǎn)的編號(hào)從1到P)
隨后的Q行,每行有兩個(gè)正整數(shù)A,B(0<A,B<P),表示編號(hào)為A和B的兩點(diǎn)之間有連線。
輸出
如果存在符合條件的連線,則輸出"Yes",如果不存在符合條件的連線,輸出"No"。
樣例輸入
2 4 3 1 2 1 3 1 4 4 5 1 2 2 3 1 3 1 4 3 4樣例輸出
No Yes解題思路:
對(duì)于這個(gè)問(wèn)題來(lái)說(shuō),判斷兩個(gè)條件是否滿足就好了; (1)是否連通。 (2)奇點(diǎn)個(gè)數(shù)是0或者是2。圖上線段的端點(diǎn)可以分成二類,奇點(diǎn)和偶點(diǎn)。一個(gè)點(diǎn),以它為端點(diǎn)的線段數(shù)是奇數(shù)就稱為奇點(diǎn),線段數(shù)是偶數(shù)就稱為偶點(diǎn)。 于是就可以使用并查集來(lái)做。。AC代碼:
#include<iostream> #include<cstdio> #include<cstring> int father[1001],a[1001]; int find(int x) {while(x!=father[x])x=father[x];return x; } void merge(int x,int y) {x=find(x);y=find(y);if(x!=y)father[x]=y; } int main() {int N,P,Q,A,B;int i,s,j; while(~scanf("%d",&N))while(N--){s=j=0;memset(a,0,sizeof(a));scanf("%d %d",&P,&Q);for(i=1;i<=P;i++)father[i]=i;while(Q--){scanf("%d %d",&A,&B);a[A]++;a[B]++;merge(A,B);}for(i=1;i<=P;i++){if(father[i]==i)j++;if(a[i]&1)s++;}if(j==1&&(s==0||s==2))printf("Yes\n");elseprintf("No\n");}return 0; }與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的nyist 一笔画问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: svn的备份还原(一)
- 下一篇: 第八届 省赛水题