6
来源:互联网 发布:ipad5怎么下载软件 编辑:程序博客网 时间:2024/06/11 22:03
昨天的报告今天才写……
hdu 1325.判断是不是一棵树,自己想法总是超时。
思路是定义结构体,下标作为儿子,结构体里面存父亲和有没有父亲。
开始每个儿子的父亲是自己,都没有父亲。
输入全部数据,输入过程中如果数据中有自己是自己、前者祖先等于后者祖先(其实包含自己是自己,隐隐约约觉得这步有问题)、后者已经有父亲了,都不是树;
将每个儿子的父亲改为祖先,类似并查集的“查”。
如果有两个祖先,不是树。
今天早上用并查集A了。
代码见下,先是并查集,后是错码。
#include<stdio.h>
#define N 10000
struct tree
{
int parent;
int have;
};
struct tree x[N];
int c[N];
int find(int n)
{
if(x[n].parent==n)
{
return n;
}
else
return find(x[n].parent);
}
void uni(int e,int w)
{
int o,p;
o=find(e);
p=find(w);
x[p].parent=o;
}
int main()
{
int m,n,flag,i,k=0,d;
while(1)
{
for(i=0;i<N;i++)
{
x[i].parent=i;
x[i].have=0;
c[i]=0;
}
flag=1;
while(1)
{
scanf("%d %d",&m,&n);
if(m<0)
return 0;
if(m==n)
{
if(m==0)
{
k++;
break;
}
else
{
flag=0;
}
}
else
{
if(x[n].have==0&&(find(m)!=find(n)))
{
uni(m,n);
x[n].have=1;
}
else
{
flag=0;
}
}
}
d=0;
for(i=1;i<N;i++)
{
if(x[i].have==1)
{
c[(x[i].parent)]=1;
}
}
for(i=1;i<N;i++)
{
d=d+c[i];
}
if(flag==1&&d==1)
{
printf("Case %d is a tree.\n",k);
}
else
{
printf("Case %d is not a tree.\n",k);
}
}
}
#include<stdio.h>
#define N 100000
struct tree
{
int father;
int visit;
};
struct tree son[N];
int sum[N];
int find(int i)
{
if(son[i].father==i)
return i;
else
return find(son[i].father);
}
int main()
{
int i,a,b,flag,k=0;
while(scanf("%d %d",&a,&b)!=EOF&&(a>=0&&b>=0))
{
for(i=0;i<N;i++)
{
sum[i]=0;
son[i].father=i;
son[i].visit=0;
}
son[b].father=a;
son[b].visit=1;
flag=0;
if(a==b)
flag=1;
do
{
scanf("%d %d",&a,&b);
if(a==b)
{
if(a==0)
break;
else
flag=1;
}
else
{
if(son[b].visit==1||find(a)==find(b))
{
flag=1;
}
son[b].father=a;
son[b].visit=1;
}
}while(1);
k++;
if(flag==1)
{
printf("Case %d is not a tree.\n",k);
}
else
{
for(i=1;i<N;i++)
{
if(son[i].visit==1)
{
son[i].father=find(i);
sum[son[i].father]=1;
}
}
for(i=1;i<N;i++)
{
flag+=sum[i];
}
if(flag==1)
printf("Case %d is a tree.\n",k);
else
printf("Case %d is not a tree.\n",k);
}
}
return 0;
}
- 6
- 6
- 6
- 6
- 6
- 6
- 6
- 6
- 6
- 6
- 6
- 6
- 6
- 6
- 6
- 6
- 6
- 6
- CountDownLatch
- 归档日志查询
- oracle学习路线图
- 一个IT大学生来深圳2年半的找工作感受(helpdesk网管)
- 海思媒体处理平台架构
- 6
- 注意stringstream.str()临时变量的lifecycle
- 测试服务端大量生成临时String类型JVM性能
- Unity3d与iOS交互开发——接入平台SDK必备技能
- Android 如何解决开机过程kernel logo到开机动画黑屏问题
- java学习笔记6——java静态内部类
- Unity资源打包及动态加载
- Android [MDT]CheckSum_Gen工具如何支持客制化分区
- java学习笔记7——java局部内部类