neu1132(增量最小生成树,两点之间的最大边权)
2014-09-19 00:06
260 查看
问题:给n-1条边构成一个最小生成树,然后q次询问,每次加入一条边,求新边和n-1条边构成的最小生成树。
解题思路:每次增加一条边,就会构成一个回路,去掉这个回路上权值最大的边,得到的就是最小生成树。
解题思路:每次增加一条边,就会构成一个回路,去掉这个回路上权值最大的边,得到的就是最小生成树。
#include<iostream> #include<algorithm> #include<stdio.h> #include<math.h> #include<vector> #include<cstring> #include<string> #define N 1005 #define inf 0x3f3f3f3f #define pi acos(-1.0) #define eps 10e-6 using namespace std; struct node { int u,cost; }; vector<node> G ; int dist ,vis ; void dfs(int k,int cur,int cost)//求任意两点间的最大边权 { vis[cur] = 1; int len = G[cur].size(); int i; for(i = 0; i < len; i++) if(!vis[ G[cur][i].u ]) { dist[k][ G[cur][i].u ] = max(dist[k][ G[cur][i].u ], max(cost,G[cur][i].cost) ); dfs(k,G[cur][i].u, max(cost,G[cur][i].cost) ); } } int main() { int n,cas = 1; while(scanf("%d",&n) != EOF) { int i,j,sum = 0; for(i = 0; i <= n; i++) G[i].clear(); for(i = 1; i < n; i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); node temp; temp.cost = w; temp.u = v; G[u].push_back(temp); temp.u = u; G[v].push_back(temp); sum+=w; } memset(dist,0,sizeof(dist)); for(i = 1; i <= n; i++) { memset(vis,0,sizeof(vis)); vis[i] = 1; dfs(i,i,0); } int q; printf("Test #%d\n",cas++); scanf("%d",&q); while(q--) { int x,y,w; scanf("%d%d%d",&x,&y,&w); int ans = sum - dist[x][y] + min(dist[x][y],w); printf("%d\n",ans); } } return 0; }
相关文章推荐
- NEU 1132 Renew MST Quickly 增量最小生成树
- 增量最小生成树 NEU 1132 Renew MST Quickly
- poj3532求生成树中最大权与最小权只差最小的生成树+hoj1598俩个点之间的最大权与最小权只差最小的路经。
- 11.3.4-uva10048-floyd变形-两点之间路径上最大边的最小值
- poj3532求生成树中最大权与最小权只差最小的生成树+hoj1598俩个点之间的最大权与最小权只差最小的路经。
- iOS生成最大最小数之间随机数
- CSUOJ 1219 建食堂(两点之间最大距离最小)
- (HDU 5723)Abandoned country <最小生成树 + 树上所有两点之间的距离的期望> 多校训练1
- POJ 2253 Frogger (求某两点之间所有路径中最大边的最小值)
- HOJ 1440 Knight Moves -------简单搜索 BFS 求l两点之间最小的到达步数
- UESTC 1635 最大最小生成树
- poj 2395 Out of Hay (最小生成树的最大边)
- poj-Out of Hay-最小生成树的最大边权
- 最小生成树的最大边poj2395
- (hruscal12.3.3)POJ 3522 Slim Span(求解一个生成树使得该树中的最大边权值和最小边权值之差最小)
- 输入数列,以某数为结束标志,以“先进先出”方式生成单链表,输出表中各结点的值;再求表中结点的平均值、最大值、最小值。
- POJ3723 Conscription , 最大权森林问题 ->最小生成树问题
- 二分图的最小路径覆盖,最大独立集,最大团,支配数之间关系证明
- poj 2377-prim(最小生成树的最大边权的和)
- poj Kruskal 【poj3723 Conscription : 最大生成树;poj 1251 Jungle Roads: 最小生成树poj1861Network】