HDU 5424 Rikka with Graph II
【题目链接】:click here~~
代码:
#include <bits/stdc++.h>
using namespace std;
const int N=1005;
vector <int >g[N];
bool vis[N];
int dg[N];
int cnt;
int n,u,v;
bool ok;
void dfs(int u,int cur)
{
if(cur==n)
{
ok=true;
return ;
}
if(ok) return ;
for(int i=0; i<g[u].size(); ++i)
{
int v=g[u][i];
if(vis[v]) continue;
vis[v]=true;
dfs(v,cur+1);
vis[v]=false;
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
memset(vis,0,sizeof(vis));
memset(dg,0,sizeof(dg));
for(int i=1; i<=n; ++i) g[i].clear();
for(int i=1; i<=n; ++i)
{
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
dg[u]++;
dg[v]++;
}
ok=true;
cnt=0;
for(int i=1; i<=n; ++i)
{
if(dg[i]==0) ok=false;
else if(dg[i]==1) cnt++;
}
if(!ok||cnt>2)
{
puts("NO");
continue;
}
if(cnt==0) puts("YES");
else
{
ok=false;
for(int i=1; i<=n; ++i)
{
if(dg[i]==1)
{
vis[i]=true;
dfs(i,1);
if(ok) break;
}
}
if(ok) puts("YES");
else puts("NO");
}
}
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u013050857/article/details/48116301