POJ2421 Constructing Roads 最小生成树
修路
| 时限: 2000MS | 内存限制: 65536K | |
| 提交总数: 31810 | 接受: 14215 | 
描述
有N个村庄,编号从1到N,您应该修建一些道路,使每两个村庄可以相互连接。我们说两个村庄A和B是连通的,当且仅当A和B之间有一条道路,或者存在一个村庄C使得A和C之间有一条道路,并且C和B连通时。
我们知道,一些村庄之间已经存在一些道路,您的工作是建造一些道路,以使所有村庄都连接起来,并且所有道路的长度都应最小。
输入
第一行是整数N(3 <= N <= 100),它是村庄的数量。然后是N行,其中第i个包含N个整数,而这N个整数中的第j个是村庄i与村庄j之间的距离(该距离应为[1,1000]之内的整数)。
然后有一个整数Q(0 <= Q <= N *(N +1)/ 2)。然后出现Q条线,每条线包含两个整数a和b(1 <= a <b <= N),这意味着已经建立了村庄a和村庄b之间的道路。
产量
您应该输出包含整数的线,该整数是要连接所有村庄的所有道路的长度,并且该值是最小值。
样本输入
3
0 990 692
990 0 179
692 179 0
1
1 2样本输出
179资源
北京大学月刊,KICC
就是给了N个村庄,然后给你权值什么的 ,后面又给了一个数M,告诉你哪些路已经修好了,你就不用修了,最后问最小生成树,问需要修的最短的路。
思路:把已经修建好的路的权值设置为0,这样求和就不用重复计算,而且能保证这些之前的路优先选择!
#include<iostream>
#include<queue>
#include<algorithm>
#include<set>
#include<cmath>
#include<vector>
#include<map>
#include<stack>
#include<bitset>
#include<cstdio>
#include<cstring>
//---------------------------------Sexy operation--------------------------//
#define cini(n) scanf("%d",&n)
#define cinl(n) scanf("%lld",&n)
#define cinc(n) scanf("%c",&n)
#define cins(s) scanf("%s",s)
#define coui(n) printf("%d",n)
#define couc(n) printf("%c",n)
#define coul(n) printf("%lld",n)
#define debug(n) printf("%d_________________________________\n",n);
#define speed ios_base::sync_with_stdio(0)
#define file  freopen("input.txt","r",stdin);freopen("output.txt","w",stdout)
//-------------------------------Actual option------------------------------//
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,n,a) for(int i=n;i>=a;i--)
#define Swap(a,b) a^=b^=a^=b
#define Max(a,b) (a>b?a:b)
#define Min(a,b) a<b?a:b
#define mem(n,x) memset(n,x,sizeof(n))
#define mp(a,b) make_pair(a,b)
#define pb(n)  push_back(n)
#define dis(a,b,c,d) ((double)sqrt((a-c)*(a-c)+(b-d)*(b-d)))
//--------------------------------constant----------------------------------//
#define INF  0x3f3f3f3f
#define esp  1e-9
#define PI   acos(-1)
using namespace std;
#define maxn 1020
#define INF 0x3f3f3f3f
using namespace std;
int dis[maxn][maxn];
int d[maxn];
bool vis[maxn];
int n,q;
void prim()
{
    for(int i = 1; i <= n; i ++)
    {
        d[i] = dis[1][i];
        vis[i] = 0;
    }
    for(int i = 1; i <= n; i ++)
    {
        int minx = INF;
        int now;
        for(int j = 1; j <= n; j ++)
        {
            if(!vis[j] && minx > d[j])
            {
                now = j;
                minx = d[j];
            }
        }
        vis[now] = 1;
        for(int k = 1; k <= n; k ++)
        {
            if(!vis[k] && d[k] > dis[now][k])
                d[k] = dis[now][k];
        }
    }
    int sum = 0;
    for(int i = 1; i <= n; i ++)
        sum += d[i];
    printf("%d\n",sum);
}
int main()
{
    scanf("%d",&n);
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= n; j ++)
        {
            scanf("%d",&dis[i][j]);
        }
    scanf("%d",&q);
    int x,y;
    while(q --)
    {
        scanf("%d%d",&x,&y);
        dis[x][y] = dis[y][x] = 0;
    }
    prim();
    return 0;
}
POJ2421 Constructing Roads 最小生成树的更多相关文章
- hdu Constructing Roads (最小生成树)
		题目:http://acm.hdu.edu.cn/showproblem.php?pid=1102 /************************************************* ... 
- HDU 1102 Constructing Roads (最小生成树)
		最小生成树模板(嗯……在kuangbin模板里面抄的……) 最小生成树(prim) /** Prim求MST * 耗费矩阵cost[][],标号从0开始,0~n-1 * 返回最小生成树的权值,返回-1 ... 
- HDU1102&&POJ2421 Constructing Roads                                                                                            2017-04-12 19:09             44人阅读              评论(0)              收藏
		Constructing Roads Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) ... 
- POJ2421 Constructing Roads
		Constructing Roads 这道题很水,就是一个裸的最小生成树,最不过把已经连接的节点的值再设为0. 代码: #include<cstdio> #include<cstri ... 
- POJ 2421 Constructing Roads (最小生成树)
		Constructing Roads Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u ... 
- POJ2421 Constructing Roads【最小生成树】
		题意: 有N个点,有些点已经连接了,然后求出所有点的连接的最短路径是多少. 思路: 最小生成树的变形,有的点已经连接了,就直接把他们的权值赋为0,一样的就做最小生成树. 代码: prime: #inc ... 
- 【kruscal】【最小生成树】poj2421 Constructing Roads
		SB题,求最小生成树,其中有些边已经给您建好啦. 随意暴力即可. #include<cstdio> #include<algorithm> #include<cstrin ... 
- POJ - 2421  Constructing Roads (最小生成树)
		There are N villages, which are numbered from 1 to N, and you should build some roads such that ever ... 
- hdu 1102 Constructing Roads(最小生成树 Prim)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 Problem Description There are N villages, which ... 
随机推荐
- flask-sqlalchemy的基本使用
			flask-sqlalchemy 1 .配置应用和基本使用 和sqlalchemy一样,先定义好数据库配置和db_url.然后在app的config加入SQLALCHEMY_DATABASE_URI等 ... 
- MTK Android 耳机线控的实现方法
			android 耳机线控的实现方法 keycodeonkeydownkeyevent 耳机线控的功能 耳机线控是一种很好用,并且能提升用户体验的功能.可以用来实现一些常用和基本的功能.比如:实现音乐播 ... 
- flask 入门 之 Python Shell (一)
			1.安装插件: pip install flask_script 2.代码: #encoding:utf-8 from flask_sqlalchemy import SQLAlchemy from ... 
- python数据类型及有关的实用函数
			本系列例子使用python3.x, 编辑时间:2019-09-03,23:03:36 python以“对象引用”来存储数据,以对象来表达数据,每个对象都具有身份,对象和值. 实用函数: id(): 查 ... 
- AJ学IOS(16)UI之XIB自定义Cell实现团购UI
			AJ分享,必须精品 先看效果图 自定义Cell 本次主要是自定义Cell的学习 实现自定义Cell主要有三种方法:按照使用的频繁度排序: XIB > 纯代码 > StoryBoard XI ... 
- 【高并发】高并发环境下如何防止Tomcat内存溢出?看完我懂了!!
			写在前面 随着系统并发量越来越高,Tomcat所占用的内存就会越来越大,如果对Tomcat的内存管理不当,则可能会引发Tomcat内存溢出的问题,那么,如何防止Tomcat内存溢出呢?我们今天就来一起 ... 
- Spring Cloud 系列之 Gateway 服务网关(二)
			本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Gateway 服务网关(一) 本篇文章讲解 Gateway 网关的多种路由规则.动态路由规则(配合服务发现的路由规则 ... 
- Java - window下环境配置
			JDK下载 官网:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html 百度网盘: 链接:https://pan.ba ... 
- HTML学习过程-(1)
			记录我HTML的学习 (1) 最开始学习html是在因为在听北京理工大学教授讲的网络公开课上.当时老师讲的是网络爬虫,因为要爬取特定网页的信息,需要借助[正则表达式](https://baike.ba ... 
- SpringBoot系列(九)单,多文件上传的正确姿势
			SpringBoot系列(九)分分钟解决文件上传 往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配 ... 
