The people of Absurdistan discovered how to build roads only last year. After the discovery, every city decided to build their own road connecting their city

with another city. Each newly built road can be used in both directions.

Absurdistan is full of surprising coincidences. It took all N cities
precisely one year to build their roads. And even more surprisingly, in the end it was possible

to travel from every city to every other city using the newly built roads.

You bought a tourist guide which does not have a map of the country with the new roads. It only contains a huge table with the shortest distances between all

pairs of cities using the newly built roads. You would like to know between which pairs of cities there are roads and how long they are, because you want to

reconstruct the map of the N newly
built roads from the table of shortest distances.

You get a table of shortest distances between all pairs of cities in Absurdistan using the N roads
built last year. From this table, you must reconstruct the road

network of Absurdistan. There might be multiple road networks with N roads
with that same table of shortest distances, but you are happy with any one of

those networks.

Input

For each test case:

  • A line containing an integer N (2≤N≤2000) --
    the number of cities and roads.
  • N lines
    with N numbers
    each. The j-th
    number of the i-th
    line is the shortest distance from city i to
    city j.
    All distances between two distinct cities will be
  • positive and at most 1000000.
    The distance from i to i will
    always be 0 and
    the distance from i to j will
    be the same as the distance from jto i.

Output

For each test case:

  • Print N lines
    with three integers 'a b c'
    denoting that there is a road between cities 1≤a≤N and 1≤b≤N of
    length 1≤c≤1000000,
    where a≠b.
    If there are
  • multiple solutions, you can print any one and you can print the roads in any order. At least one solution is guaranteed to exist.

Print a blank line between every two test cases.

Sample input and output

Sample Input Sample Output
4
0 1 2 1
1 0 2 1
2 2 0 1
1 1 1 0
4
0 1 1 1
1 0 2 2
1 2 0 2
1 2 2 0
3
0 4 1
4 0 3
1 3 0
2 1 1
4 1 1
4 2 1
4 3 1 2 1 1
3 1 1
4 1 1
2 1 1 3 1 1
2 1 4
3 2 3

Source

Northwestern European Regional Contest 2013



思路:先用kruskal求出n-1条边。那么n-1条边必然是满足的,接下来仅仅须要再找一条边就能够了,直接按权值从小到大枚举全部边直到找到一条边的距离与前面n-1条边构成的图里面该条边的距离不相等就可以,假设没找到就随便输出前n-1条边中的随意一条。


#include <stdio.h>
#include <algorithm>
#define INF 999999999
using namespace std; struct E{
int u,v,val;
bool operator<(const E &p) const
{
return val<p.val;
}
}e[4000005]; int node[2005],dis[2005][2005]; int findroot(int x)
{
if(node[x]!=x) return node[x]=findroot(node[x]); return node[x];
} int main()
{
int n,i,j,k,t,u,v,val,cnt,roota,rootb;
bool first=1; while(~scanf("%d",&n))
{
if(first) first=0;
else puts(""); cnt=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++)
{
scanf("%d",&val); if(i<=j) continue; e[cnt].u=i;
e[cnt].v=j;
e[cnt++].val=val;
} sort(e,e+cnt); for(i=1;i<=n;i++) node[i]=i;
for(i=1;i<=n;i++) for(j=1;j<=n;j++) dis[i][j]=INF; t=0; for(i=0;i<cnt;i++)
{
roota=findroot(e[i].u);
rootb=findroot(e[i].v); if(roota!=rootb)
{
node[roota]=rootb; dis[e[i].u][e[i].v]=dis[e[i].v][e[i].u]=e[i].val; u=e[i].u,v=e[i].v,val=e[i].val; printf("%d %d %d\n",e[i].u,e[i].v,e[i].val); t++; if(t>=n-1) break;
}
} for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(dis[i][k]==INF) break;//没有这个优化直接T了。。。 dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
}
} for(i=0;i<cnt;i++)
{
if(e[i].val!=dis[e[i].u][e[i].v])
{
printf("%d %d %d\n",e[i].u,e[i].v,e[i].val); break;
}
} if(i==cnt) printf("%d %d %d\n",u,v,val);
}
}

UESTC-888-Absurdistan Roads(kruskal+floyd)的更多相关文章

  1. CDOJ 888 Absurdistan Roads

    Absurdistan Roads Time Limit: 5678/3456MS (Java/Others)     Memory Limit: 65432/65432KB (Java/Others ...

  2. UESTC 30 最短路,floyd,水

    最短路 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Statu ...

  3. HDU 1102 Constructing Roads(kruskal)

    Constructing Roads There are N villages, which are numbered from 1 to N, and you should build some r ...

  4. POJ1251 Jungle Roads(Kruskal)(并查集)

    Jungle Roads Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 23882   Accepted: 11193 De ...

  5. POJ 2421 Constructing Roads (Kruskal算法+压缩路径并查集 )

    Constructing Roads Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 19884   Accepted: 83 ...

  6. HDU1301 Jungle Roads(Kruskal)

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  7. POJ 2421 Constructing Roads(Kruskal算法)

    题意:给出n个村庄之间的距离,再给出已经连通起来了的村庄.求把所有的村庄都连通要修路的长度的最小值. 思路:Kruskal算法 课本代码: //Kruskal算法 #include<iostre ...

  8. POJ1251 Jungle Roads Kruskal+scanf输入小技巧

    Jungle Roads The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign ai ...

  9. hdu 1102 Constructing Roads(kruskal || prim)

    求最小生成树.有一点点的变化,就是有的边已经给出来了.所以,最小生成树里面必须有这些边,kruskal和prim算法都能够,prim更简单一些.有一点须要注意,用克鲁斯卡尔算法的时候须要将已经存在的边 ...

随机推荐

  1. sql service重置自动增长字段数字的方法

    1.--SQL表重置自增长字段(不删除表的数据) DBCC CHECKIDENT('表名', RESEED, 起始数) 2.--删除表数据的同时,重置自动增长字段 truncate table 表名

  2. HTML5-常见的事件- DOMContentLoaded事件

    一般我们监听文档是否加载完成是使用 window的load事件,该事件会在页面中的一切加载完毕时触发,但这个过程可能会因为要加载的外部资源过多而等待时间过长. DOMContentLoaded事件:则 ...

  3. 不同浏览器对URL最大长度的限制(转)

    1.今天碰到一个bug,window.open后面的页面,接收参数不全,导致后台报错.实验了一下.发现是使用get方法请求服务器时,URL过长所致 微软官方的说明: http://support.mi ...

  4. Android 定义重名权限问题

    一直以来对android的权限机制就有一个疑问,因为在使用权限时,实际上只需要permission的name这一个标签,而在定义权限时,android是不会检查是否重名的,那么在两个应用定义了重名权限 ...

  5. java读取xml(当xml放在包里时)

  6. html标签元素分类

    元素分类 html中的标签元素大体分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <div>.<p>.<h1>...&l ...

  7. 函数内声明变量不加var和加var的区别

      这段代码说明了在函数中声明没加var关键字的变量时,会出现什么结果.   分两种不同的情况:   1.如果函数内没有同名的局部变量覆盖“无var变量”,那么它就是个全局变量,在函数外部也可以访问到 ...

  8. js判断数组和对象

    <script> var arr=new Array(); var obj={'1':2}; var num=11; function isType(obj){ if(obj instan ...

  9. c# Parallel并行运算

    string str = ""; DataTable dt=new DataTable(); dt.Columns.Add("name", typeof(Sys ...

  10. 【转】Objective-C 与 Runtime:为什么是这样?

    原文地址: http://t.cn/RyyNIXd?u=2483713130&m=3884400301576073&cu=2483713130 笔者非常高兴能为Objective-C写 ...