TOJ 4394 Rebuild Road
描述
Once,in a kingdom,there are N cities.M roads have been buit such that from one city you can reach any other cities.Between any two cities there is at most one road.But after a series war,D road are destoryed.The king wants to repair the road system.There are two important cities A and B,The king wants to make the two cities connected as soon as possible.Now it is your job to repair some roads such that A and B are connected and the length of all roads repaired is minimun.
输入
Input may contain seveal test data sets.
For
each data set, the first line contain an integer
N(2<N<100),indicating the number of cities.The cities are numbered
from 1 To N.then the second line contains an integer M (
N-1<M<N*(N-1)/2),indicating the number of roads.Next come M
lines,each contains three integers I,J,K,which means that there is a
road between I and J,whose length is K.
Then next line contains an
integer D(1<=D<=M),indicating the number of roads which are
destoryed.The following D lines each contain two integer I,J,which means
that the road which directly connected city I and J has been destoryed.
The last line contains two integer A,B,indicating the two important cities.
Input is ended by N = 0,which should not be processed.
输出
For
each test case,just output one line with the total length of the roads
needed to repair such that A and B are connected.If we could not raech B
from A,output"-1".
样例输入
3
2
1 2 1
2 3 2
1
1 2
1 3
0
样例输出
1
每个城市之间都有一些路连接,某些城市之间的有遭到了破坏,现在要求我们求修路的最短长度。
如果修完所有的路也无法保证通行则输出-1。
逆向思维,让城市之间已经存在的路的长度为0,需要修补的初始化要修补的路的长度。这样就变成了简单的单源最短路径问题了。
#include <stdio.h>
#include <string.h>
#define MAXN 110
#define inf 0x3f3f3f3f int N;
int m1[MAXN][MAXN];
int m2[MAXN][MAXN];
int dist[MAXN];
int visited[MAXN]; void dijkstra(int begin){
int i,j,k;
k=begin;
for(j=1; j<=N; j++){
visited[j]=0;
if(j!=k){
dist[j]=m2[k][j];
}
}
visited[k]=1;
for(i=1;i<N-1;i++){
int min=inf;
k=0;
for(j=1; j<=N; j++){
if(!visited[j]&&dist[j]<min){
min=dist[j];
k=j;
}
}
if(k==0)break;
visited[k]=1;
for(j=1; j<=N; j++){
if(!visited[j]&& dist[k]+m2[k][j]<dist[j]){
dist[j]=dist[k]+m2[k][j];
}
}
}
} int main(){
int M,D,a,b,c;
int B,E;
while( scanf("%d",&N)!=EOF && N){
for( int i=1 ;i<=N; i++ ){
for( int j=1; j<=N; j++ ){
if(i==j)m2[i][j]=0;
else m2[i][j]=inf;
}
}
scanf("%d",&M);
for( int i=0; i<M; i++ ){
scanf("%d%d%d",&a,&b,&c);
m1[a][b]=c;
m1[b][a]=c;
m2[a][b]=0;
m2[b][a]=0;
}
scanf("%d",&D);
for( int i=0; i<D; i++ ){
scanf("%d%d",&a,&b);
m2[a][b]=m1[a][b];
m2[b][a]=m1[b][a];
}
scanf("%d%d",&B,&E);
dijkstra(B);
if(dist[E]==inf){
printf("-1\n");
}else{
printf("%d\n",dist[E]);
}
}
return 0;
}
TOJ 4394 Rebuild Road的更多相关文章
- POJ 3204 Ikki's Story I - Road Reconstruction
Ikki's Story I - Road Reconstruction Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 7 ...
- POJ3204 Ikki's Story I - Road Reconstruction
Ikki's Story I - Road Reconstruction Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 7 ...
- HDU 3080 The plan of city rebuild(除点最小生成树)
题意 一个城市原来有l个村庄 e1条道路 又添加了n个村庄 e2条道路 后来后销毁了m个村庄 与m相连的道路也销毁了 求使全部未销毁村庄相互连通最小花费 不能连通输出what a pity ...
- HDU 3080 The plan of city rebuild(prim和kruskal)
The plan of city rebuild Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- Visual Studio 中 Build 和 Rebuild 的区别
因为之前写的程序比较小,编译起来比较快,所以一直都没有太在意 Build 和 Rebuild 之间的区别,后来发现两个还是有很大不同. Build 只针对在上次编译之后更改过的文件进行编译,在项目比较 ...
- 解决 node-gyp rebuild 卡住 的问题
node-gyp在编译前会首先尝试下载node的headers文件,像这样: gyp http GET https://nodejs.org/download/release/v6.8.1/node- ...
- AndroidStudio中make Project、clean Project、Rebuild Project的区别
1.Make Project:编译Project下所有Module,一般是自上次编译后Project下有更新的文件,不生成apk. 2.Make Selected Modules:编译指定的Modul ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- Rebuild Instance 操作详解 - 每天5分钟玩转 OpenStack(37)
上一节我们讨论了 snapshot,snapshot 的一个重要作用是对 instance 做备份. 如果 instance 损坏了,可以通过 snapshot 恢复,这个恢复的操作就是 Rebuil ...
随机推荐
- C#静态类 静态方法与非静态方法比较
静态类 在类(class)上加入static修饰,表示该类无法被实例化,并将该类中,无法实例化变量或函数 静态类的主要特性 仅包含静态成员 无法实例化 静态类的本质,时一个抽象的密封类,所以不能被继承 ...
- React杂篇(1) -- 打包发布注意事项
打包后资源路径 问题:直接打包会出现一下情况: 方式一: package.json文件下加入homepage字段 { "name": "wap-v2", &qu ...
- Weekly Contest 117
965. Univalued Binary Tree A binary tree is univalued if every node in the tree has the same value. ...
- 日期 Date()
1.Date 对象用于处理日期和时间.创建 Date 对象的语法:var myDate=new Date()Date 对象会自动把当前日期和时间保存为其初始值.2.参数形式有以下5种: new Dat ...
- 5. 常见C语言字符串库函数的使用及实现
1. strncat 函数: [函数原型]#include <string.h> char *strncat( char *str1, const char *str2, size_t c ...
- P3596 [POI2015]MOD
$ \color{#0066ff}{ 题目描述 }$ 给定一棵无根树,边权都是1,请去掉一条边并加上一条新边,定义直径为最远的两个点的距离,请输出所有可能的新树的直径的最小值和最大值 \(\color ...
- win10进入安全模式的方法
https://jingyan.baidu.com/article/a3aad71ac5919bb1fa009667.html
- C#实现WebSocket协议客户端和服务器websocket sharp组件实例解析
看到这篇文章的题目,估计很多人都会问,这个组件是不是有些显的无聊了,说到web通信,很多人都会想到ASP.NET SignalR,或者Nodejs等等,实现web的网络实时通讯.有关于web实时通信的 ...
- 将符合json的字符串转化为json对象
变量data是符合json格式的字符串 var data="[key:value]"; 第一种方式: var jsonData = eval("("+data+ ...
- hdu 6196 搜索+剪枝
Today, Bob plays with a child. There is a row of n numbers. One can takes a number from the left sid ...