TJU 2248. Channel Design 最小树形图
2016-04-13 18:20
483 查看
最小树形图,測模版....
2248. Channel Design
Time Limit: 1.0 Seconds Memory Limit: 65536K
Total Runs: 2199 Accepted Runs: 740
We need irrigate our farms, but there is only one source of water nearby. So we need build some water channels with minimum cost.
In Figure (a), V1 indicates the source of water. Other N-1 nodes in the Figure indicate the farms we need to irrigate. An edge represents you
can build a channel between the two nodes, to irrigate the target. The integers indicate the cost of a channel between two nodes.
Figure (b) represents a design of channels with minimum cost.
each line contains three integers i j cij, means we can build a channel from node Vi to node Vj, which cost cij.
(1 ≤ i, j ≤ N; i ≠ j; 1 ≤ cij ≤ 100)
The source of water is always V1.
The input is terminated by N = M = 0.
If no design can irrigate all the farms, output "impossible" instead.
Problem setter: Hill
Source: TJU Contest August
2006
Submit List
Runs Forum Statistics
2248. Channel Design
Time Limit: 1.0 Seconds Memory Limit: 65536K
Total Runs: 2199 Accepted Runs: 740
We need irrigate our farms, but there is only one source of water nearby. So we need build some water channels with minimum cost.
In Figure (a), V1 indicates the source of water. Other N-1 nodes in the Figure indicate the farms we need to irrigate. An edge represents you
can build a channel between the two nodes, to irrigate the target. The integers indicate the cost of a channel between two nodes.
Figure (b) represents a design of channels with minimum cost.
Input
There are multiple cases, the first line of each case contains two integers N and M (2 ≤ N ≤ 100; 1 ≤ M ≤ 10000), N shows the number of nodes. The following M lines,each line contains three integers i j cij, means we can build a channel from node Vi to node Vj, which cost cij.
(1 ≤ i, j ≤ N; i ≠ j; 1 ≤ cij ≤ 100)
The source of water is always V1.
The input is terminated by N = M = 0.
Output
For each case, output a single line contains an integer represents the minimum cost.If no design can irrigate all the farms, output "impossible" instead.
Sample Input
5 8 1 2 3 1 3 5 2 4 2 3 1 5 3 2 5 3 4 4 3 5 7 5 4 3 3 3 1 2 3 1 3 5 3 2 1 0 0
Sample Output
17 6
Problem setter: Hill
Source: TJU Contest August
2006
Submit List
Runs Forum Statistics
/* *********************************************** Author :CKboss Created Time :2015年07月04日 星期六 23时35分05秒 File Name :TJU2248.cpp ************************************************ */ #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <string> #include <cmath> #include <cstdlib> #include <vector> #include <queue> #include <set> #include <map> using namespace std; const int INF=0x3f3f3f3f; const int maxn=110; int n,m; struct Edge { int u,v,cost; }; Edge edge[maxn*maxn]; int pre[maxn],id[maxn],vis[maxn],in[maxn]; int zhuliu(int root,int n,int m,Edge edge[]) { int res=0,u,v; while(true) { for(int i=0;i<n;i++) in[i]=INF; for(int i=0;i<m;i++) { if(edge[i].u!=edge[i].v&&edge[i].cost<in[edge[i].v]) { pre[edge[i].v]=edge[i].u; in[edge[i].v]=edge[i].cost; } } for(int i=0;i<n;i++) if(i!=root&&in[i]==INF) return -1; int tn=0; memset(id,-1,sizeof(id)); memset(vis,-1,sizeof(vis)); in[root]=0; for(int i=0;i<n;i++) { res+=in[i]; v=i; while(vis[v]!=i&&id[v]==-1&&v!=root) { vis[v]=i; v=pre[v]; } if(v!=root&&id[v]==-1) { for(int u=pre[v];u!=v;u=pre[u]) id[u]=tn; id[v]=tn++; } } if(tn==0) break; for(int i=0;i<n;i++) if(id[i]==-1) id[i]=tn++; for(int i=0;i<m;) { v=edge[i].v; edge[i].u=id[edge[i].u]; edge[i].v=id[edge[i].v]; if(edge[i].u!=edge[i].v) edge[i++].cost-=in[v]; else swap(edge[i],edge[--m]); } n=tn; root=id[root]; } return res; } int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); while(scanf("%d%d",&n,&m)!=EOF) { if(n==0&&m==0) break; for(int i=0;i<m;i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); u--; v--; edge[i].u=u; edge[i].v=v; edge[i].cost=w; } int ans=zhuliu(0,n,m,edge); if(ans==-1) puts("impossible"); else printf("%d\n",ans); } return 0; }
相关文章推荐
- DevExpress控件使用经验总结
- Android中的Parcel
- (github精选)优秀的openSCAD项目image2surface
- com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link
- Android WebView Java与Js通信
- 第六周项目2-带武器的类
- LeetCode 12 Integer to Roman
- 设置Eclipse下可以查看jdk源码
- DockerFile 参数详解
- ClassLoader 提供了两个方法用于从装载的类路径中取得资源:
- node js 基础 创建模块
- linux awk 内置函数详细介绍
- 发送一个模拟返回键
- TCP拥塞控制机制
- Tips
- ffmpeg使用Json简洁显示视频的音频信息
- Ruby中XML格式数据处理库REXML的使用方法指南
- HDU2066:一个人的旅行(Dijkstra)
- Pentaho Work with Big Data(五)—— 格式化原始web日志
- clustered index