URAL-1982 Electrification Plan 最小生成树
2013-10-30 00:13
344 查看
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1982
题意:无向图,给n个点,n^2条边,每条边有个一权值,其中有k个点有发电站,给出这k个点的编号,选择最小权值的边,求使得剩下的点都能接收到电。
发电站之间显然不能有边,那么把k个点合成一个点,然后在图上就MST就可以了。
题意:无向图,给n个点,n^2条边,每条边有个一权值,其中有k个点有发电站,给出这k个点的编号,选择最小权值的边,求使得剩下的点都能接收到电。
发电站之间显然不能有边,那么把k个点合成一个点,然后在图上就MST就可以了。
//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=110; const int INF=0x3f3f3f3f; const int MOD=95041567,STA=8000010; const LL LNF=1LL<<60; const double EPS=1e-8; const double OO=1e15; const int dx[4]={-1,0,1,0}; const int dy[4]={0,1,0,-1}; const int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //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 ,p ,w ; 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,0); for(i=0;i<k;i++){ scanf("%d",&a); id[a]=1; } k=2; for(i=1;i<=n;i++){ if(id[i])continue; id[i]=k++; } mem(w,INF); for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ scanf("%d",&a); w[id[i]][id[j]]=Min(w[id[i]][id[j]],a); } } cnt=0; for(i=1;i<k;i++){ for(j=i+1;j<k;j++){ e[cnt].u=i,e[cnt].v=j; e[cnt].val=w[i][j]; cnt++; } } sort(e,e+cnt); ans=0; for(i=1;i<k;i++)p[i]=i; for(i=0;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 0; }
相关文章推荐
- Ural 1982 Electrification Plan (prim最小生成树)
- ural 1982. Electrification Plan 【最小生成树】
- URAL 1982 最小生成树变形
- ural 1982. Electrification Plan (最小生成树)
- ural 1982. Electrification Plan -最小生成树
- hust/ural Penguin-Avia 最小生成树
- timus 1982 Electrification Plan(最小生成树)
- URAL 1416 Confidential --最小生成树与次小生成树
- [最小直径生成树 模板题] BZOJ 2180 最小直径生成树 & BZOJ 2182 [Spoj1479] TGK & Ural 1569 Networking the “Iset”
- ural Electrification Plan 最小生成树,多个源点
- Ural 1416 Confidential(最小生成树+次小生成树)
- URAL 1416 Confidential <最小生成数和次小生成数>
- URAL 1160. Network 最小生成树
- URAL - 1160 Network(最小生成树)
- URAL 1160 Network(最小生成树)
- URAL 1416 Confidential --最小生成树与次小生成树
- URAL(timus) 1272 Non-Yekaterinburg Subway(最小生成树)
- [最小极差生成树 LCT || 二分答案 CDQ分治 并查集] Ural 2055 Urban Geography
- URAL - 1416 Confidential (最小生成树与次小生成树)
- Poj 1258 Agri-Net[MST最小生成树]