POJ 2831 Prim

原创 2016年08月30日 21:00:52

题意:给出一个n点m边的无向带权图,以及q个询问,每个询问查询当第i条边的权值改为x时,第i条边是否在该图的最小生成树(可能不唯一)之中。

思路:用Prim在n*n时间内求出最小生成树,并用Max[i][j]记录最小生成树上从i到j之间的边的权值最大值,每次询问只需判断两个节点之间边权最大值是否大于等于输入的x,若是则可以用这条修改过的边代替那条权值最大的边,输出Yes。注意可能有重边。

代码:

#include <cstdio>
#include <iostream>
#define For(i,j,k) for(int i = j;i <= (k);i ++)
using namespace std;

const int N = 1010, M = 100010, INF = 2e9;
int x[M], y[M], G[N][N], Max[N][N], dis[N], pre[N], vis[N], n, m, q;

void Prim(){
    For(i,2,n+1) dis[i] = INF;
    For(i,1,n){
        int k = n + 1;
        For(j,1,n)
            if(!vis[j] && dis[j] < dis[k])
                k = j;
        For(j,1,n)
            if(vis[j])
                Max[j][k] = Max[k][j] = max(Max[j][pre[k]], dis[k]);
        vis[k] = 1;
        For(j,1,n)
            if(!vis[j] && dis[j] > G[k][j])
                pre[j] = k, dis[j] = G[k][j];
    }
}

int main(){
    scanf("%d%d%d", &n, &m, &q);
    For(i,1,n)
        For(j,1,n) G[i][j] = INF;
    For(i,1,m){
        int w;
        scanf("%d%d%d", &x[i], &y[i], &w);
        G[x[i]][y[i]] = G[y[i]][x[i]] = min(G[x[i]][y[i]], w);
    }
    Prim();
    For(i,1,q){
        int k, t;
        scanf("%d%d", &k, &t);
        puts(Max[x[k]][y[k]] >= t ? "Yes" : "No");
    }
    return 0;
}
版权声明:本文为博主原创文章,转载需注明原文地址。

POJ2831 Can We Build This One?(次小生成树)

Can We Build This One? Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 141...

Poj2831 树链剖分||次小生成树

因为开的树链剖分专题,一看题目,第一思路就是: 让找出一个最小生成树,然后将这棵生成树进行链剖,再维护两点间边的最大值,只有查询询问,很好写,然后由于太急躁,以致Find()函数明显的错误居然没有发...

poj 2831(次小生成树)

题意:给你一幅图,再给你Q个询问,每个询问为id cost,即如果将id这条边的边权改为cost的话,这条边是否可能是最小生成树中的一条边 解题思路:将第i条边(u,v)的权值修改的话,要判断是...

poj 2831 次小生成树模板

/*次小生成树 题意:给你一些路径,现在将一部分路径权值减少后问是否可以替代最小生成树里面的边。 解:次小生成树,即将这条边连上,构成一个环 求出任意两点路径之间的除了这条边的最大值,比较这个最大值>...

次小生成树(poj2831)

题目大意:给你一幅图,接下来是q个询问。每个询问的形式为: id c 表示询问把第id条边的长度改为c后,这条边是否存在于整个图的最小生成树中。做法:次小生成树。若用prim变形,...
  • Frods
  • Frods
  • 2016年09月01日 22:01
  • 109

POJ1789-Truck History【Prim】

  • 2011年07月30日 18:34
  • 8KB
  • 下载

POJ2485-Highways【Prim】

  • 2011年07月30日 18:35
  • 8KB
  • 下载

poj 3026 BFS + prim(最短路最小生成树的区别)

Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12909   Acc...

POJ3026-Borg Maze【BFS+Prim】

  • 2011年07月30日 18:36
  • 12KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 2831 Prim
举报原因:
原因补充:

(最多只允许输入30个字)