欧拉回路:
两种情况
- 所有点度为偶数,且出发点一定是终止点
- 有两个奇数度点,分别为出发点和终止点
// ShellDawn
// POJ1300
// No.17
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define MM(x) memset(x,0,sizeof(x))
using namespace std;
int solve(const string& cc){
int L = cc.length();
int ans = 0;
for(int i=0;i<L;i++){
ans *= 10;
ans += cc[i] - '0';
}
return ans;
}
int main(){
string a;
while(cin>>a){
if(a == "START"){
int s,n;
cin>>s>>n;
getchar(); // 吞掉START一行最后的回车
int cnt[30];
MM(cnt);
int ans = 0;
for(int i=0;i<n;i++){
char c;
string cc;
while((c=getchar())!='\n'){
if(c>='0' && c<='9'){
cc+=c;
}else{
cnt[solve(cc)] ++ ;
cnt[i]++;
ans++;
cc = "";
}
}
if(cc != ""){
cnt[solve(cc)] ++ ;
cnt[i]++;
cc = "";
ans++;
}
}
scanf("%*s");
bool flag = true;
bool flagflag = true;
for(int i=0;i<n;i++){
if(cnt[i]%2 ==0){
continue;
}else{
flagflag = false;
if(i==s || i==0) continue;
else{
flag = false;
}
}
}
if((flagflag && s == 0) || (!flagflag && flag)){
printf("YES %d\n",ans);
}else{
puts("NO");
}
}else{
return 0;
}
}
return 0;
}