NC15518. 虚虚实实
描述
震为雷,临危不乱,亨通畅达;巽为风,柔顺伸展,厚载万物。算卦先生来问你,对于每个他给出的无向图,是否存在一条路径能够经过所有边恰好一次,并且经过所有点?不需要满足最后回到起点。
震卦:洊雷,震,君子以恐惧修省。一口金钟在淤泥,人人拿着当玩石,忽然一日钟悬起,响亮一声天下知。
巽卦:随风,巽,君子以申命行事。一叶孤舟落沙滩,有篙无水进退难,时逢大雨江湖溢,不用费力任往返。
输入描述
第一行一个数 ,表示有 组数据。对与每组数据,第一行有两个数 ,接下去 行每行两个数 描述一条无向边 。图不保证联通。
输出描述
对于每组数据,如果存在,输出 ,否则输出 。
示例1
输入:
2 2 2 1 1 2 1 4 6 1 3 1 4 1 2 3 2 4 2 4 3
输出:
Zhen Xun
pypy3(pypy3.6.1) 解法, 执行用时: 151ms, 内存消耗: 25284K, 提交时间: 2021-04-14 22:53:50
T=int(input()) while T>0: T-=1 n,m=map(int,input().split()) d=[[] for i in range(n)] while m>0: m-=1 u,v=map(int,input().split()) if u!=v: d[u-1].append(v) d[v-1].append(u) p=0 for i in d: if len(i)%2==1: p+=1 q=[1] haved=[1] while len(q)!=0: t=q.pop() for i in d[t-1]: if i not in haved: haved.append(i) q.append(i) if (p==2 or p==0) and len(haved)==n: print("Zhen") else: print("Xun")
Python3(3.5.2) 解法, 执行用时: 197ms, 内存消耗: 3688K, 提交时间: 2018-04-21 21:07:33
def f(a, i): if a[i] == -1: return i a[i] = f(a, a[i]) return a[i] T = int(input()) while T > 0: T -= 1 n, m = map(int, input().split()) d = [0] * n a = [-1] * n while m > 0: m -= 1 u, v = map(int, input().split()) d[u-1] += 1 d[v-1] += 1 if f(a,u - 1) != f(a, v - 1): a[f(a,u - 1)] = f(a, v - 1) c = 0 for i in d: if i & 1: c += 1 print('Zhen' if c <= 2 and sum([i==-1 for i in a]) == 1 else 'Xun')
C++11(clang++ 3.9) 解法, 执行用时: 8ms, 内存消耗: 488K, 提交时间: 2018-04-25 08:43:04
#include <stdio.h> int a[100],s[100]; int zz(int k) { while(k!=a[k])k=a[k]; return k; } int main() { int t,n,m,i,j,x,y,sum; scanf("%d",&t); while(t--) { for(i=0;i<100;i++)a[i]=i,s[i]=0;sum=0; scanf("%d%d",&n,&m); for(i=1;i<=m;i++) { scanf("%d%d",&x,&y); int xx=zz(x); int yy=zz(y); s[x]++;s[y]++; if(xx!=yy) a[yy]=xx; } for(i=1;i<=n;i++) { if(zz(i)!=zz(1))break; sum+=s[i]%2; } if(sum<=2&&i==n+1)printf("Zhen\n"); else printf("Xun\n"); } return 0; }