您的位置:首页 > 其它

uva 10596 Morning Walk

2013-06-21 17:24 435 查看
这个R有可能为零,为零的时候各数据也都OK,需要注意。

#include<iostream>
#include<cmath>
#include<cstdio>
#include <cstring>
using namespace std;
int N, R, ok;
int head[10010], end[10010], vis[10010];
int degree[210], flag, num;
void dfs(int cur)
{
for(int i = 0; i < R; i++)
{
if(!vis[i] && head[i] == cur && end[i] == flag)
{
num++;
if(num == N)
ok = 1;
return;
}
if( !vis[i] && head[i] == cur)
{
num++;
vis[i] = 1;
dfs(end[i]);
}
}
}

int main()
{
while(cin >> N >> R)
{
memset(degree, 0, sizeof(degree));
for(int i = 0; i < R; i++)
{
cin >> head[i] >> end[i];
degree[ head[i] ]++;
degree[ end[i] ]++;
}
ok = 1;
if(R==0) ok = 0;
for(int i = 0; i < N; i++)
if( degree[i]%2 == 1)
{
ok = 0;
break;
}
memset(vis, 0, sizeof(vis));
if(ok)
{
flag = head[0];
dfs(head[0]);
}
if(ok) cout << "Possible" << endl;
else cout << "Not Possible" << endl;
}
return 0;
}

突然发现这个题数据有点弱,只需要判断度数就行了。无语。。。。

#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
int N, R, ok;
int head, end, degree[210];
int main()
{
while(cin >> N >> R)
{
memset(degree, 0, sizeof(degree));
for(int i = 0; i < R; i++)
{
cin >> head >> end;
degree[ head ]++;
degree[ end ]++;
}
ok = 1;
if(R==0) ok = 0;
for(int i = 0; i < N; i++)
if( degree[i]%2 == 1)
{
ok = 0;
break;
}
if(ok) cout << "Possible" << endl;
else cout << "Not Possible" << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: