并查集树数据结构hdu1325
2024-10-01 14:53:15
我的解法就是去构造了一棵树
以数组的存储方式
数组的值存放节点的根。
排除空树
剩下的就是出现环和多根节点的情况
也就是排除森林和有一个节点多个入度的情况
排除森林就用到了并查集
也就是便利数组让其仅仅有一个根
排除多个入度的情况更简单
就是把这个点插入到数上时
假设这个点已经有了根节点,就出现了两个入度
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int sett[1000 + 100],g[1000 + 100];
int find2(int x)
{
while(x != sett[x] ) x = sett[x];
return x;
}
int main()
{
int x,y,flag=1,cases=1;
while(scanf("%d%d",&x,&y)){
flag=1;
for(int i=1;i<=1000;i++) sett[i]=i;
// for(int i=1;i<=1000;i++) g[i]=i;
memset(g,0,sizeof(g)); if(x == 0 && y == 0) flag=0;
if(x < 0 && y < 0) break;
else sett[y]=x;
g[x]=1;
g[y]=1; while(scanf("%d%d",&x,&y)){
g[x]=1;
g[y]=1;
if(!x&&!y) break;
int fx = sett[x];
int fy = sett[y];
if( fy != y) //out circle and two roots
flag=0;
else sett[fy]=fx;
} int countt=0;
for(int i=1;i<=1000;i++) if(g[i]&&sett[i]==i) countt++;
// printf("countt %d\n",countt);
if(countt > 1) flag=0;
// printf("flag %d\n",flag
if(flag) printf("Case %d is a tree.\n",cases);
else printf("Case %d is not a tree.\n",cases);
cases++;
// for(int i=1;i<=10;i++)
// printf("%d ",i);
// printf("\n");
// for(int i=1;i<=10;i++)
// printf("%d ",sett[i]);
// printf("\n");
}
return 0;
}
最新文章
- 开放数据库互联ODBC配置(odbcconf)
- SSM——(二):easyUI的CRUD
- TI的DSP、ST的ARM、Intel的X86浮点性能对比
- FusionCharts的使用方法(php)
- JS 获取上一层目录
- Linux 容器的使用
- ASP.NET MVC5学习笔记之Action参数模型绑定基本过程
- 【转】Google推荐的命名规则——Android图片资源
- Spring 3 MVC and JSON example
- hdu 4778 Gems Fight! 博弈+状态dp+搜索
- js导出成excel
- Android新建项目后src下没有自动生成文件
- NodeJS学习指南
- Linux启动kettle及linux和windows中kettle往hdfs中写数据(3)
- 大型ERP系统在线体验
- fillder---断言,更改提交数据
- .NET自动化测试工具链:Selenium+NUnit+ExtentReport
- 模仿Semaphore自定义自己的 信号量
- PyCharm‘s Project Deployment
- 税控服务器 TC5002UpdatePackage 安装更新
热门文章
- [ZJOI2015]幻想乡战略游戏(点分树)
- JZOJ5787轨道(容斥+DP)
- Laravel核心解读--ENV的加载和读取
- 普通码农和CTO之间的差距
- 时间就是金钱HNCOI2000(最短路)
- A simpleHttp Proxy
- 10个关于Android开发的实用教程
- BEGINNING SHAREPOINT&;#174; 2013 DEVELOPMENT 第10章节--SP2013中OAuth概览 创建和管理应用程序身份
- 【CTO辩论会】移动开发人员忠于技术or 背离技术
- jquery开发之代码风格