题意:给你一幅图,再给你Q个询问,每个询问为id cost,即如果将id这条边的边权改为cost的话,这条边是否可能是最小生成树中的一条边

解题思路:将第i条边(u,v)的权值修改的话,要判断是否是最小生成树中的一条边,首先要把它加入进去,此时必定会引起原来的生成树成环,所以必定要擦去一条边,擦去的是哪一条边,这就利用到了次小生成树的原理了。

之前写过一个次小生成树的题,现在回过头看,感觉又有点不对了。

这里再总结一次:

首先肯定是构造一颗最小生成树,接下来就是枚举不在生成树里的边,假定为(u,v),此时应该把它加入到生成树中,但这样肯定会形成u->v的环路,此时肯定要删除u->v这条环路里的边,删哪一条呢?肯定是除了边(u,v)外的最大边。

现在是如何找到这条最大边,可以采用dp的思想,即dp[i][j]表示在树上i->j的最大值(注意,由于是树,肯定i->j的路径是唯一的)。我们在做Prim算法时,每次都是加入一个顶点S,我们还应该记录下顶点S加入到生成树里,它与谁相连,即我们在更新low[]数组时要记录的。这样,我们可以得到状态方程:dp[i][j] = dp[j][i] = max(dp[j][pre[i]],low[i]),此时i为即将要加入的点,而j是已经在生成树顶点集合里的点。

完成了一次Prim算法,同样也可以将dp数组更新好了,那么回到最开始的问题,删除的边我们就可以直接用dp[u][v]。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int maxn = 100005;
const int inf = 0x3f3f3f3f;
struct Edge
{int u,v,c;
}edge[maxn];
int n,m,q;
int map[1005][1005],path[1005][1005];
int pre[1005],low[1005];
bool vis[1005],used[1005][1005];int Prim()
{int k = 1,ans = 0;memset(path,0,sizeof(path));memset(vis,false,sizeof(vis));memset(used,false,sizeof(used));vis[k] = true;for(int i = 1; i <= n; i++){low[i] = map[k][i];pre[i] = k;}for(int i = 1; i < n; i++){int MIN = inf;for(int j = 1; j <= n; j++)if(vis[j] == false && low[j] < MIN){MIN = low[j];k = j;}ans += MIN;vis[k] = true;used[k][pre[k]] = used[pre[k]][k] = true;for(int j = 1; j <= n; j++){if(vis[j] == true && j != k)path[j][k] = path[k][j] = max(path[j][pre[k]],low[k]);if(vis[j] == false && low[j] > map[k][j]){low[j] = map[k][j];pre[j] = k;}}}return ans;
}int main()
{while(scanf("%d%d%d",&n,&m,&q)!=EOF){memset(map,inf,sizeof(map));for(int i = 1; i <= m; i++){scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].c);map[edge[i].u][edge[i].v] = map[edge[i].v][edge[i].u] = min(map[edge[i].u][edge[i].v],edge[i].c);}int ans = Prim();while(q--){int id,cost;scanf("%d%d",&id,&cost);if(path[edge[id].u][edge[id].v] >= cost)printf("Yes\n");else printf("No\n");}}return 0;
}

poj 2831(次小生成树)相关推荐

  1. poj 1679 次小生成树

    次小生成树的求法: 1.Prime法 定义一个二维数组F[i][j]表示点i到点j在最小生成树中的路径上的最大权值.有个知识就是将一条不在最小生成树中的边Edge加入最小生成树时,树中要去掉的边就是E ...

  2. POJ 1679 The Unique MST(次小生成树)

    求次小生成树的两种方法. 第一种:Kruskal算法比较好操作.先求一遍最小生成树,然后再记录最小生成树上的边.然后再枚举删去最小生成树上的边,再求最小生成树,如果求出的最小生成树的花费等于第一次最小 ...

  3. POJ 1679 - The Unique MST(次小生成树)

    题目链接 https://vjudge.net/problem/POJ-1679 Given a connected undirected graph, tell if its minimum spa ...

  4. nyoj118 修路方案(求次小生成树)

    题目118 题目信息 运行结果 本题排行 讨论区 修路方案 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市 ...

  5. nyoj 118 修路方案【次小生成树】

    修路方案 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修路. ...

  6. 南阳118--修路方案(次小生成树)

    修路方案 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修路. ...

  7. (POJ-1679)次小生成树模板

    原题链接:http://poj.org/problem?id=1679 The Unique MST Given a connected undirected graph, tell if its m ...

  8. HDU4081(次小生成树)

    1.其中:枚举每条不在最小生成树上的边,并把这条边放到最小生成树上面,然后就一定形成环,那么我们将这条环中取出最长的一条路.最终我们得到的权值便是最小生成树的权值. Max[i][j]表示的最小生成树 ...

  9. 模板 - LCA最近公共祖先(倍增法、Tarjan、树上差分、LCA优化的次小生成树)

    整理的算法模板合集: ACM模板 注意x和y的LCA可以是x或者y本身 一.LCA的在线倍增算法 /*给定一棵包含 n个节点的有根无向树,有 m个询问,每个询问 给出了一对节点的编号 x和 y,询问 ...

最新文章

  1. Pytorch:transforms的二十二个方法
  2. C# Task的用法
  3. 网络配置_Linux网络环境配置
  4. MySQL 5.7建表时date类型提示默认值类型错误的问题处理
  5. 谈谈SQL Server高可用的常见问题
  6. 精读《你不知道的javascript》中卷
  7. Python3生成脚本实现重置键盘键位
  8. 嵌入式linux 试卷,嵌入式Linux模拟试卷
  9. 源码编译mysql5.5_源码编译安装MySQL5.5
  10. ActiveMQ学习总结(1)——ActiveMQ快速入门
  11. websocket php apache,PHP第一篇:PHP WebSocket实现前后端数据交互,亲测可用(windows+ apache2.4 +php5.6 )...
  12. 十进制转36进制(10进制转任意进制的方法)
  13. hadoop2.6.集群搭建
  14. Winform使用FTP实现自动更新
  15. 【Java后台】从零开始的Java后台开发(一)
  16. 网络工程制图论文计算机,计算机工程制图设计分析论文
  17. 深度学习面试100题
  18. Bit-Z合约关于平仓的说明
  19. ③企业虚拟化Kvm 管理、kvm高级命令、磁盘格式转换、挂载磁盘、第三篇
  20. 安氏图书报刊发行管理软件[酷软推荐]

热门文章

  1. vue js 定义对象_JS标准内置对象Proxy及Vue中的proxy.js文件
  2. 案例 | 锋芒易商如何做到年省 50 人天?
  3. 重磅!一文解读神策智能推荐
  4. 解决IE8下载停留在99%的脚本
  5. mahout基于Hadoop的CF代码分析(转)
  6. 关于SpringAOP的XML方式的配置
  7. Android onTouchEvent, onClick及onLongClick的调用机制
  8. Castle.ActiveRecord的ProxyFactory配置
  9. cisco stp技术应用
  10. Machine Monitoring System Document