zoukankan      html  css  js  c++  java
  • Problem: 八中生成树2 (C语言)

    Problem: 八中生成树2

    Problem: 八中生成树2

    Time Limit: 1 Sec  Memory Limit: 128 MB
    [Submit][Status][Web Board]

    Description

    八中里面有N个建设物,M条边。
    对于这种要建最小生成树的问题,你应该很熟练了。
    现在老大决定降低某条边的费用,然后这条边必须要被选中,因为这条路他每天都要走,自然......
    问选了这条边后是否可以得到一个比从前总开支相等或更小的方案。

    Input

    第一行三个整数N,M,Q(1<=N<=10000,N-1<=M<=100000,0
    接下来M行,每行三个整数(X,Y,Z)描述一条可以建造的路。 0<=Z<=10000 
    最后Q行,每行两个整数i,x(1<=i<=M,0<=x)描述一个修改计划,
    即要你判断如果 将第i条公路的修建费用降低为x元后,是否可以得到一个比从前总开支相等或更小的方案

    Output

    按顺序输出Q行,每行输出"Yes"或"No",Yes表示可以建造,No表示不可能

    Sample Input

    3 4 3
    1 2 10
    1 3 6
    2 3 4
    1 3 7
    4 6
    1 7
    1 5

    Sample Output

    Yes
    No
    Yes

    HINT

    [Submit][Status]
    #include<stdio.h>
    #include<string.h>
    #define max(a,b) ((a)>(b)?(a):(b))
    #define min(a,b) ((a)<(b)?(a):(b))
    #define maxn 1005
    const int INF=0x3fffffff;
    int n,m,k;
    int G[maxn][maxn],mx[maxn][maxn];
    int pre[maxn],low[maxn],vis[maxn];
    int e=1;
    struct Edge {
    	int u,v,w;
    } edge[maxn*100];
    void Prim() {
    	memset(vis,0,sizeof(vis));
    	int pos=1;
    	for(int i=1; i<=n; i++) low[i]=G[pos][i];
    	low[pos]=0,vis[pos]=1,pre[pos]=1;
    	for(int i=1; i<=n; i++) {
    		int min=INF;
    		for(int j=1; j<=n; j++)
    			if(!vis[j]&&low[j]<min)
    				min=low[pos=j];
    		for(int j=1; j<=n; j++)
    			if(vis[j])
    				mx[pos][j]=max(mx[j][pre[pos]],low[pos]),
    				mx[j][pos]=mx[pos][j];
    		vis[pos]=1;
    		for(int j=1; j<=n; j++)
    			if(!vis[j]&&low[j]>G[pos][j])
    				low[j]=G[pos][j],
    				pre[j]=pos;
    	}
    }
    int main() {
    	scanf("%d %d %d",&n,&m,&k);
    	memset(G,63,sizeof(G));
    	memset(mx,0,sizeof(mx));
    	for(int i=1; i<=n; i++) G[i][i]=0;
        int u,v,w;
    	while(m--) {
    		scanf("%d %d %d",&u,&v,&w);
    		edge[e].u=u;
    		edge[e].v=v;
    		edge[e].w=w;
    		e++;
            G[u][v]=G[v][u]=min(G[u][v],w);
    	}
    	Prim();
    	int num,c;
    	while(k--) {
    		scanf("%d %d",&num,&c);
    		puts(mx[edge[num].u][edge[num].v]<c?"No":"Yes");
    	}
    }
    
  • 相关阅读:
    MySQL锁
    mysql服务性能优化—my.cnf配置说明详解
    springmvc请求参数获取的几种方法
    Linux mysql 添加远程连接
    Linux 操作 mysql
    Linux 安装 mysql 转 http://www.cnblogs.com/fnlingnzb-learner/p/5830622.html
    linux 下 安装nginx
    dubbo 实战总结
    分布式事务的几种方式
    精巧好用的DelayQueue 转
  • 原文地址:https://www.cnblogs.com/ZhaoChongyan/p/11740399.html
Copyright © 2011-2022 走看看