人活系列Streetlights (秩)
生活随笔
收集整理的這篇文章主要介紹了
人活系列Streetlights (秩)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
人活著系列之Streetlights
Time Limit: 1000MS Memory limit: 65536K
題目描寫敘述
人活著假設是為了家庭,親情----能夠說是在這個世界上最溫暖人心的,也是最讓人放不下的。也是我在思索這個問題最說服自己接受的答案。對。或許活著是一種責任。為了生殖下一代,為了孝敬父母,男人要養家糊口。女人要生兒育女。就這樣循環的過下去,但終于呢?還是勞累愁煩,轉眼成空呀! 為了響應政府節約能源的政策,某市要對路燈進行改革,已知該市有n個城鎮。有m條道路。改革后該市僅僅開一部分道路的路燈。并且要使隨意兩個城鎮之間有路燈開著。城鎮編號為0~n-1。每條道路開的路燈要花費一定的費用,求改革后最多能節省多少費用。輸入
多組輸入。每組第一行輸入n, m(1≤n≤ 100000。n-1≤m ≤100000);接下來m行。每行3個數u, v, w。代表城鎮u到城鎮v開著路燈的花費為w。輸出
輸出改革后最多能節省的費用。假設數據不能保證隨意兩個城鎮有路燈開著。輸出-1。演示樣例輸入
3 3 0 1 1 1 2 5 0 2 2 4 3 0 1 1 1 2 3 0 2 4演示樣例輸出
5 -1提示
水題
#include<iostream> #include<cstdio> #include<cstring> #include <cstdlib> #include <math.h> #include <algorithm> #define INF 0x3f3f3f3f const int N = 100010; using namespace std;struct node {int u,v,w; } g[N]; int num = 0,sum = 0,zong = 0,n,m,father[N]; int cmp(const void *a,const void *b) {struct node *X,*Y;X = (struct node *)a;Y = (struct node *)b;return X->w - Y->w; } int findx(int r) {while(r != father[r]){r = father[r];}int i = r,j;while(father[i] != r){j = father[i];father[i] = r;i = j;}return r; }void Kruskal() {for(int i = 0; i < m; i++){int uu = findx(g[i].u);int vv = findx(g[i].v);if(uu!=vv){num ++;sum += g[i].w;father[uu] = vv;}if(num == n-1)break;} } void init() {zong = 0,num = 0,sum = 0;for(int i = 0; i <=n; i++)father[i] = i; } int main() {while(~scanf("%d%d",&n,&m)){init();for(int i = 0; i < m; i++){scanf("%d%d%d",&g[i].u,&g[i].v,&g[i].w);zong += g[i].w;}qsort(g,m,sizeof(g[0]),cmp);Kruskal();(num==n-1)?
printf("%d\n",zong-sum):puts("-1"); } }
版權聲明:本文博客原創文章。博客,未經同意,不得轉載。
總結
以上是生活随笔為你收集整理的人活系列Streetlights (秩)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图片任意放大缩小 插件
- 下一篇: 第七节