http://hihocoder.com/contest/hiho49/problem/1
给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,该条路称为欧拉路。
一个无向图存在欧拉路当且仅当该图是连通的且有且只有2个点的度数是奇数,此时这两个点只能作为欧拉路径的起点和终点。
若图中没有奇数度的点,那么起点和终点一定是同一个点,这样的欧拉路叫做欧拉回路
那么首先判断图连通,然后统计度为奇数的点是否是2个,或者0个(0个就是欧拉回路)。
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <vector> 5 #include <cstring> 6 #include <string> 7 #include <algorithm> 8 #include <string> 9 #include <set> 10 #include <functional> 11 #include <numeric> 12 #include <sstream> 13 #include <stack> 14 #include <map> 15 #include <queue> 16 //#pragma comment(linker, "/STACK:102400000,102400000") 17 #define CL(arr, val) memset(arr, val, sizeof(arr)) 18 19 #define ll long long 20 #define inf 0x7f7f7f7f 21 #define lc l,m,rt<<1 22 #define rc m + 1,r,rt<<1|1 23 #define pi acos(-1.0) 24 25 #define L(x) (x) << 1 26 #define R(x) (x) << 1 | 1 27 #define MID(l, r) (l + r) >> 1 28 #define Min(x, y) (x) < (y) ? (x) : (y) 29 #define Max(x, y) (x) < (y) ? (y) : (x) 30 #define E(x) (1 << (x)) 31 #define iabs(x) (x) < 0 ? -(x) : (x) 32 #define OUT(x) printf("%I64d ", x) 33 #define lowbit(x) (x)&(-x) 34 #define Read() freopen("a.txt", "r", stdin) 35 #define Write() freopen("b.txt", "w", stdout); 36 #define maxn 310 37 #define maxv 10010 38 #define mod 1000000000 39 using namespace std; 40 41 vector<int>g[maxv]; 42 int vis[maxv],in[maxv]; 43 int n,m; 44 45 void dfs(int u) 46 { 47 vis[u]=1; 48 for(int i=0;i<g[u].size();i++) 49 { 50 if(!vis[g[u][i]]) dfs(g[u][i]); 51 } 52 } 53 int main() 54 { 55 // Read(); 56 int u,v; 57 scanf("%d%d",&n,&m); 58 memset(in,0,sizeof(in)); 59 for(int i=1;i<=m;i++) 60 { 61 scanf("%d%d",&u,&v); 62 g[u].push_back(v); 63 g[v].push_back(u); 64 in[u]++; 65 in[v]++; 66 } 67 memset(vis,0,sizeof(vis)); 68 bool flag=0; 69 dfs(1); 70 int ans=0; 71 for(int i=1;i<=n;i++) 72 { 73 if(!vis[i]) 74 { 75 flag=1; 76 } 77 if(in[i]%2!=0) ans++; 78 } 79 //printf("%d ",ans); 80 if(flag||(ans!=2&&ans!=0)) printf("Part "); 81 else printf("Full "); 82 return 0; 83 }