Timusoj 1982. Electrification Plan
http://acm.timus.ru/problem.aspx?space=1&num=1982
1982. Electrification Plan
Memory limit: 64 MB
Input
Output
Sample
| input | output |
|---|---|
4 2 |
3 |
Problem Source: Open Ural FU Championship 2013
All submissions (2430) All accepted submissions (894) Solutions rating (630)
分析:
无向图,给n个点,n^2条边,每条边有个一权值,其中有k个点有发电站,给出这k个点的编号,选择最小权值的边,求使得剩下的点都能接收到电。
发电站之间显然不能有边,那么把k个点合成一个点,然后在图上就MST就可以了。
AC代码1:
1、edge[i][j]=0是个很巧妙的设置。
2、求最小生成树,由于生成树是图的极小联通子图。最小生成树一定要包含图中所有的点。
#include<cstdio>
#include<iostream>
#include<cstring>
#define INF 0x3f3f3f3f
using namespace std; int edge[][];
int vis[],dis[];
bool flag[];
int n,k,ans; void prim()
{
int u=,minw;
for(int i=;i<=n;i++)
{
vis[i]=;
dis[i]=edge[u][i];
}
vis[u]=;
for(int i=;i<n;i++)
{
minw=INF;
for(int j=;j<=n;j++)
{
if(!vis[j] && dis[j]<minw)
{
minw=dis[j];
u=j;
}
}
ans+=minw;
vis[u]=;
for(int j=;j<=n;j++)
{
if(!vis[j] && edge[u][j]<dis[j])
dis[j]=edge[u][j];
}
}
} int main()
{
int d;
while(scanf("%d%d",&n,&k)!=EOF)
{
memset(vis,,sizeof(vis));
memset(flag,false,sizeof(flag));
ans=;
for(int i=;i<k;i++)
{
scanf("%d",&d);
flag[d]=true;
}
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
scanf("%d",&edge[i][j]);
}
}
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(flag[i]&&flag[j])
edge[i][j]=;
}
}
prim();
printf("%d\n",ans);
}
return ;
}
AC代码2:
//STATUS:C++_AC_31MS_401KB
#include <functional>
#include <algorithm>
#include <iostream>
//#include <ext/rope>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <numeric>
#include <cstring>
#include <cassert>
#include <cstdio>
#include <string>
#include <vector>
#include <bitset>
#include <queue>
#include <stack>
#include <cmath>
#include <ctime>
#include <list>
#include <set>
#include <map>
using namespace std;
//#pragma comment(linker,"/STACK:102400000,102400000")
//using namespace __gnu_cxx;
//define
#define pii pair<int,int>
#define mem(a,b) memset(a,b,sizeof(a))
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define PI acos(-1.0)
//typedef
typedef __int64 LL;
typedef unsigned __int64 ULL;
//const
const int N=;
const int INF=0x3f3f3f3f;
const int MOD=,STA=;
const LL LNF=1LL<<;
const double EPS=1e-;
const double OO=1e15;
const int dx[]={-,,,};
const int dy[]={,,,-};
const int day[]={,,,,,,,,,,,,};
//Daily Use ...
inline int sign(double x){return (x>EPS)-(x<-EPS);}
template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
template<class T> inline T lcm(T a,T b,T d){return a/d*b;}
template<class T> inline T Min(T a,T b){return a<b?a:b;}
template<class T> inline T Max(T a,T b){return a>b?a:b;}
template<class T> inline T Min(T a,T b,T c){return min(min(a, b),c);}
template<class T> inline T Max(T a,T b,T c){return max(max(a, b),c);}
template<class T> inline T Min(T a,T b,T c,T d){return min(min(a, b),min(c,d));}
template<class T> inline T Max(T a,T b,T c,T d){return max(max(a, b),max(c,d));}
//End struct Edge{
int u,v,val;
bool operator < (const Edge& a)const {
return val<a.val;
}
}e[N*N];
int n,k;
int id[N],p[N],w[N][N]; int find(int x){return p[x]==x?x:p[x]=find(p[x]);} int main()
{
// freopen("in.txt","r",stdin);
int i,j,a,x,y,ans,cnt;
while(~scanf("%d%d",&n,&k))
{
mem(id,);
for(i=;i<k;i++){
scanf("%d",&a);
id[a]=;
}
k=;
for(i=;i<=n;i++){
if(id[i])continue;
id[i]=k++;
}
mem(w,INF);
for(i=;i<=n;i++){
for(j=;j<=n;j++){
scanf("%d",&a);
w[id[i]][id[j]]=Min(w[id[i]][id[j]],a);
}
}
cnt=;
for(i=;i<k;i++){
for(j=i+;j<k;j++){
e[cnt].u=i,e[cnt].v=j;
e[cnt].val=w[i][j];
cnt++;
}
}
sort(e,e+cnt);
ans=;
for(i=;i<k;i++)p[i]=i;
for(i=;i<cnt;i++){
x=find(e[i].u);y=find(e[i].v);
if(x!=y){
p[y]=x;
ans+=e[i].val;
}
} printf("%d\n",ans);
}
return ;
}
Timusoj 1982. Electrification Plan的更多相关文章
- timus 1982 Electrification Plan(最小生成树)
Electrification Plan Time limit: 0.5 secondMemory limit: 64 MB Some country has n cities. The govern ...
- zufeoj Electrification Plan (最小生成树,巧妙设e[i][j]=0)
Electrification Plan 时间限制: 1 Sec 内存限制: 128 MB提交: 31 解决: 13[提交][状态][讨论版] 题目描述 Some country has n ci ...
- URAL-1982 Electrification Plan 最小生成树
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1982 题意:无向图,给n个点,n^2条边,每条边有个一权值,其中有k个点有发电站,给出这 ...
- Electrification Plan(最小生成树)
http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=50#problem/D 最小生成树模板,注意的是这里有k个发电站,它们不再需要连 ...
- Electrification Plan 最小生成树(prim+krusl+堆优化prim)
题目 题意: 无向图,给n个城市,n*n条边,每条边都有一个权值 代表修路的代价,其中有k个点有发电站,给出这k个点的编号,要每一个城市都连到发电站,问最小的修路代价. 思路: prim:把发电站之间 ...
- URAL-1982-Electrification Plan最小生成树或并查集
Electrification Plan 题意:在一个无向图中,给你几个源点,找出把所有点连接到源点后最小的消费: 可以利用并查集: 先用结构体把每个边存起来,再按照消费大小排序.之后从消费小的到大的 ...
- Prim && Kruskal
Electrification Plan Prim #include<iostream> #include<cstring> using namespace std; cons ...
- 测试计划(Test Plan)
测试计划(Test Plan) 版权声明:本文为博主原创文章,未经博主允许不得转载. 测试计划的概念: 测试计划是一个文档,描述了进行测试的测试范围,测试策略和方法,测试资源和进度.是对整个测试活动进 ...
- SQL Tuning 基础概述02 - Explain plan的使用
1.explain plan的使用 SQL> explain plan for delete from t_jingyu; Explained. SQL> select * from ta ...
随机推荐
- [转]Nodejs基础中间件Connect
Nodejs基础中间件Connect 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的J ...
- sql server存储过程中SELECT 与 SET 对变量赋值的区别
SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT. 对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们 并没有注意,其实这 ...
- js-倒计时自动隐藏
<!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...
- 【python】安装python第三方库lxml时,遇到问题:[ERROR: 'xslt-config' 不是内部或外部命令,也不是可运行的程序]
一.概述 lxml介绍http://lxml.de/ 二.问题 ERROR: 'xslt-config' 不是内部或外部命令,也不是可运行的程序 三.解决方法 Scrapy在Windows上的安装笔记 ...
- mysql cpu和内存监控
mysqlMem 监控:#!/bin/bashPid=`/bin/ps -ef|grep mysqld|grep -Ev "grep|safe"|awk '{print $2}'` ...
- C# 转换符的重载 显示、隐式转换
class Complex { //保存转换的值 Int32 v; public Complex(Int32 x) { v = x; } public Int32 ToInt32() { return ...
- #20145205 《Java程序设计》第4周学习总结
教材学习内容总结 1.面对对象中,因为我们需要设计多个模块,但是有不能像C语言中那样进行分块设计,所以我们用父类和子类进行模块的设计,我们在设计一个较大的程序时,在一个项目中建立不同的文件,用关键字e ...
- 多线程相关------互斥量Mutex
互斥量(Mutex) 互斥量是一个可以处于两态之一的变量:解锁和加锁.只有拥有互斥对象的线程才具有访问资源的权限.并且互斥量可以用于不同进程中的线程的互斥访问. 相关函数: CreateMutex用于 ...
- 多边形裁剪的Sutherland-Hodgman算法
多边形裁剪是渲染管线中重要的一个子阶段,它将视截体外的多边形去除.一种简单的裁剪策略是一旦发现一个顶点在裁剪区域以外,就立刻丢弃该多边形.更加精细的做法则是,将原来的多边形拆为多个不跨越边界的多边形, ...
- 快速理解几种常用的RAID磁盘阵列级别
我发现周围不少人在学习和理解RAID磁盘阵列的原理时,找了很多专业的资料来看,但是因为动手的机会比较少,因此看完以后还是似懂非懂,真正遇到实际的方案设计的时候,还是拿不定主意. 因此,我结合自己在过去 ...