一笔画问题
时间限制: 3000 ms | 内存限制:65535 KB
难度: 4
- 描述
-
zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。
规定,所有的边都只能画一次,不能重复画。
- 输入
- 第一行只有一个正整数N(N<=10)表示测试数据的组数。 每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<=2000),分别表示这个画中有多少个顶点和多少条连线。(点的编号从1到P) 随后的Q行,每行有两个正整数A,B(0<A,B<P),表示编号为A和B的两点之间有连线。 输出
- 如果存在符合条件的连线,则输出"Yes", 如果不存在符合条件的连线,输出"No"。 样例输入
-
24 31 21 31 44 51 22 31 31 43 4
样例输出 -
NoYes
来源 - 上传者
- //判断节点的度来判断图的连通, 感觉这个题判题不严格。
-
1 #include
2 #include 3 #include 4 using namespace std; 5 6 7 const int INF = 0x3f3f3f3f; 8 int father[1010], degree[1010], vis[1010]; 9 int i, j, n, flag;10 11 void init()12 {13 memset(vis, 0, sizeof(vis));14 memset(degree, 0, sizeof(degree));15 for(i=1; i<=n; i++)16 father[i] = i;17 }18 19 int find(int a)20 {21 while(a != father[a])22 a = father[a];23 return a;24 }25 26 void mercy(int a, int b)27 {28 int q = find(a);29 int p = find(b);30 if(q != p)31 father[q] = p;32 }33 34 int main()35 {36 int m, t;37 scanf("%d", &t);38 while(t--)39 {40 scanf("%d %d", &n, &m);41 init();42 for(i=0; i -
//It's bad. ~ !