#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue> using namespace std;
int n,m;
const int maxn=1e4+;
const int maxm=5e4+;
int degree[maxn];
int fa[maxn];
struct edge{
int to;
int nxt;
}e[*maxm];
int head[maxn];
int tot;
void init(){
memset(head,-,sizeof(head));
tot=;
memset(degree,,sizeof(degree));
}
void add(int u,int v){
e[tot].to=v;
e[tot].nxt=head[u];
head[u]=tot++;
}
int getfa(int u){
if(fa[u]==u) return u;
return fa[u]=getfa(fa[u]);
}
void merge(int u,int v){
int fu=getfa(u);
int fv=getfa(v);
if(fu!=fv){
fa[u]=fa[v];
}
} bool judge(){
for(int i=;i<=n;i++){
fa[i]=i;
}
for(int u=;u<=n;u++){
for(int i=head[u];i!=-;i=e[i].nxt){
int v=e[i].to;
merge(u,v);
}
}
int cnt=;
for(int i=;i<=n;i++){
if(fa[i]==i) cnt++;
}
if(cnt==) return true;
return false;
}
int main(){
while(~scanf("%d%d",&n,&m)){
init();
int u,v;
for(int i=;i<=m;i++){
scanf("%d%d",&u,&v);
degree[u]++;
degree[v]++;
add(u,v);
add(v,u);
}
bool connected=judge();
if(!connected){
printf("Part\n");
continue;
}
int cnt=;
for(int i=;i<=n;i++){
if(degree[i]%) cnt++;
}
if(cnt==||cnt==) printf("Full\n");
else printf("Part\n");
}
return ;
}

最新文章

  1. ntp
  2. 苹果下如果安装nginx,给nginx安装markdown第三方插件
  3. java多线程总结
  4. Java中的4种代码块
  5. PHP获取汉字的转化为拼音字母实现程序
  6. 《A Tour of PostgreSQL Internals》学习笔记——进程间通信
  7. Mysql在windows下的免安装配置步骤和重新安装的步骤
  8. C++ 遇见的一些函数
  9. bzoj1443
  10. sql server在使用xp_cmdshell
  11. linux如何关闭selinux?
  12. vue-router实例
  13. SpringMVC中的拦截器
  14. P1378 油滴扩展 dfs回溯法
  15. jquery简介未完成
  16. C# Http文件上传下载
  17. Python Appium 元素定位方法简单介绍
  18. springboot集成AOP管理日志
  19. C#:将数据网格内的数据导出到Excel
  20. linux 配置svn服务器+使用+注意事项

热门文章

  1. (六)VMware Harbor简单使用
  2. 获取地址栏参数,json遍历
  3. Opencascade术语笔记。
  4. Python socket 粘包
  5. Linux下如何通过命令检查网卡是否插上网线
  6. 【线段树 泰勒展开】Codechef April Challenge 2018 Chef at the Food Fair
  7. Python基础——异常
  8. python中文件操作的基本方法
  9. octave-basic
  10. 【HIHOCODER 1055】 刷油漆(树上背包)