hiho1192 简单的树嵌入(构造题)
来源:互联网 发布:剑网三萝莉脸型数据图 编辑:程序博客网 时间:2024/04/19 23:17
题目链接
#1192 : 简单的树嵌入
- 样例输入
30 11 2
- 样例输出
20 01 01 1
描述
给定一棵n个点的无权树。定义两点i, j(0 ≤ i, j ≤ n - 1)间的距离d(i, j)为两点间树上最短路径的长度(边数)。
我们需要将这n个点映射到中的向量v0 = (v0, 0, ..., v0, m - 1), ..., vn - 1 = (vn - 1, 0, ..., vn - 1, m - 1)。定义两向量vi, vj间的L1距离为
我们希望对于所有0 ≤ i, j ≤ n - 1有d(i, j) = d1(vi, vj)。
输入
第一行n。下面n - 1行,其中第i行为两个空格分开的整数xi, yi,表示点xi和yi间有一条边。
n ≤ 100. 0 ≤ xi, yi ≤ n - 1.
输出
第一行m。下面n行,其中第i行为m个空格分开的整数vi - 1, 0, ..., vi - 1, m - 1。
要求m ≤ 100且 - 100 ≤ vi, j ≤ 100。并且,对于所有0 ≤ i, j ≤ n - 1,d(i, j) = d1(vi, vj)。
如果有多解,输出任意一组满足要求的解即可。
题解:
假设只有一个点,那么构造这个点的向量为 {0} 即可。如果第二个点和这个点连了一条边,即可构造这个点的向量为{0,1},第一个点的向量结尾增加一个0位 {0,0} 。以此类推。如果第i个点和第j个点(i>j)连了一条边,即先把第j个点的向量付给第i个点,第i个点的向量新增一维为1,其它点的向量也新增一维为0。由于新增了一维,这一维只有第i个点为1,所以增加这一维对其它点的影响是一样的,而其它点之间不会因为增加这一维而受到影响。每个点增加一维,那么向量最多n维。对图进行bfs,按照上面的方法构造即可。
代码如下:
#include<iostream>#include<stdio.h>#include<algorithm>#include<math.h>#include<queue>#include<string>#include<string.h>#include<stack>#include<vector>#include<set>#include<map>typedef long long LL;typedef unsigned long long LLU;double pi = acos(-1);const int nn = 110000;const int inf = 0x3fffffff;const int inff = 0x3fffffff;const LL mod = 1000000003;using namespace std;int n;struct node{ int en,next;}E[210];int p[110],num;int ans[110][110];int len[110];void init(){ memset(p,-1,sizeof(p)); num=0;}void add(int st,int en){ E[num].en=en; E[num].next=p[st]; p[st]=num++; E[num].en=st; E[num].next=p[en]; p[en]=num++;}bool use[nn];queue<int>que;int main(){ int i,j; while(scanf("%d",&n)!=EOF) { init(); int u,v; for(i=1;i<n;i++) { scanf("%d%d",&u,&v); add(u,v); } memset(ans,0,sizeof(ans)); memset(len,0,sizeof(len)); memset(use,false,sizeof(use)); use[0]=true; len[0]=1; que.push(0); int cnt=1; while(que.size()) { int sta=que.front(); que.pop(); for(i=p[sta];i+1;i=E[i].next) { int w=E[i].en; if(!use[w]) { use[w]=true; for(j=0;j<len[sta];j++) { ans[w][j]=ans[sta][j]; } ans[w][cnt++]=1; len[w]=cnt; que.push(w); } } } printf("%d\n",cnt); for(i=0;i<n;i++) { for(j=0;j<cnt;j++) { printf("%d%c",ans[i][j],j==cnt-1?'\n':' '); } } } return 0;}
- hiho1192 简单的树嵌入(构造题)
- hihocoder 1192 简单的树嵌入 (树上DFS 构造 好题)
- hihicoder 1192 : 简单的树嵌入 搜索
- flex 嵌入简单的html
- 创建一个简单的Server(嵌入Jetty学习一)
- 为app嵌入简单好玩的客服(Android)
- c#用最简单的方法构造树(treeview)
- 循环队列的简单构造(C++)
- ......简单的构造函数
- 简单的构造函数~~
- Android简单的反编译嵌入例子
- C# 嵌入数据库SQLite的简单用法
- C++派生类与嵌入类的构造函数解析
- 简单的String类(构造、拷贝构造、赋值构造、析构等)
- 嵌入python的c++程序发布(一)最简单的方法
- 构造函数的简单使用
- string类的简单构造。
- 构造函数的简单示例
- UVA 11400 - Lighting System Design(着重题意)
- C++ 中在进程中的窗口句柄传入线程
- java.lang.NoClassDefFoundError: org/objectweb/asm/Type
- leetcode-20-Valid Parentheses
- Android之——AIDL小结
- hiho1192 简单的树嵌入(构造题)
- hdu 1533 Going Home (最小费用最大流)
- 杨辉三角_java_HDU2032
- 内存管理
- SSL/TLS双向认证实现(JAVA、TOMCAT)
- Fine-Grained Histopathological Image Analysis via Robust Segmentation and Large-Scale Retrieval文章总结
- 分离各位数
- 找数达人
- UIImage类目-返回一张拉伸的图片、自动设配6 7