亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

算法訓練 安慰奶牛

2019-11-11 05:47:06
字體:
來源:轉載
供稿:網友
算法訓練 安慰奶牛  時間限制:1.0s   內存限制:256.0MB   問題描述

Farmer John變得非常懶,他不想再繼續維護供奶牛之間供通行的道路。道路被用來連接N個牧場,牧場被連續地編號為1到N。每一個牧場都是一個奶牛的家。FJ計劃除去P條道路中盡可能多的道路,但是還要保持牧場之間 的連通性。你首先要決定那些道路是需要保留的N-1條道路。第j條雙向道路連接了牧場Sj和Ej(1 <= Sj <= N; 1 <= Ej <= N; Sj != Ej),而且走完它需要Lj的時間。沒有兩個牧場是被一條以上的道路所連接。奶牛們非常傷心,因為她們的交通系統被削減了。你需要到每一個奶牛的住處去安慰她們。每次你到達第i個牧場的時候(即使你已經到過),你必須花去Ci的時間和奶牛交談。你每個晚上都會在同一個牧場(這是供你選擇的)過夜,直到奶牛們都從悲傷中緩過神來。在早上 起來和晚上回去睡覺的時候,你都需要和在你睡覺的牧場的奶牛交談一次。這樣你才能完成你的 交談任務。假設Farmer John采納了你的建議,請計算出使所有奶牛都被安慰的最少時間。

輸入格式

第1行包含兩個整數N和P。

接下來N行,每行包含一個整數Ci。

接下來P行,每行包含三個整數Sj, Ej和Lj。

輸出格式輸出一個整數, 所需要的總時間(包含和在你所在的牧場的奶牛的兩次談話時間)。樣例輸入5 71010206301 2 52 3 52 4 123 4 172 5 153 5 6樣例輸出176數據規模與約定

5 <= N <= 10000,N-1 <= P <= 100000,0 <= Lj <= 1000,1 <= Ci <= 1,000。

思路:

這道題著實把我惡心到了,題目題意表述不清,測試樣例錯誤。

先把正確的輸入樣例給出來:

5 71010206301 2 52 3 52 4 123 4 172 5 153 5 64 5 12

輸出還是 176

題目題意表述不清,剛開始以為是每天只去拜訪一家農場,只安慰一頭奶牛。然后忽略了一局關鍵的話:你每個晚上都會在同一個牧場(這是供你選擇的)過夜

剛開始的思路是這樣的,先按照邊權求出一顆最小生成樹,然后訪問的時候在考慮每個農場安慰的時間

如上圖,假設按照邊權獲得了一顆最小生成樹,然后從頂點1出發,按照1~10的順序去訪問,那么每個頂點的訪問此書就是自身度數的2倍,遍歷一次生成樹。但是頂點1要少多1次

早上從1出發,到2,然后在2這里過夜,第二天再從2出發到3...

然后事實成功證明這是錯的+_+

關鍵的話:你每個晚上都會在同一個牧場(這是供你選擇的)過夜

按照上圖的話,我每晚可能會在不同的農場過夜,如果要在同一個農場過夜,說明每天只能走一個分支然后回來

如上圖,1->2->3->2->1在1這里過夜  1->4->1 在1這里過夜  1->5->6->5->1最后回到1

這樣的話就能保證每晚在一個農場過夜

但是這樣算出來的結果還是錯誤的,因為邊權的數值改變了。如果單純的之按照輸出進來的數值作為邊權,的確是一個最小生成樹,但是總時間里面還會受到點權的影響,這樣得出來的時間并不能夠保證是最小值。

所以,邊權的數值需要變動。和上面的規律一樣,每個點的訪問次數是自身點度數的2倍,始點多一次。所以我們可以把點權加入到邊權中。一條邊的邊權等于邊權+兩端頂點的點權。正好遍歷一次每條訪問兩次。再加上剛開始始點多出來的一次就可以了。

另外,在吐槽一下,為什么我用不壓縮路徑的并查集得出來的結果差那么多,貌似以前也遇到過這種問題,老老實實用帶路徑壓縮的吧。

AC代碼:

#include<iostream>#include<cmath>#include<cstdlib>#include<cstring>#include<string>#include<algorithm>using namespace std;const int MAXN=100005;struct node{    int s;//始點    int e;//終點    int comfort_time;//邊權}edge[MAXN];//定義邊集數組int v[MAXN];//點權int father[MAXN];bool cmp1(node a, node b)//頂點權重比較函數{    return a.comfort_time<b.comfort_time;}int Find(int x){    if(father[x]!=x)    {        int temp=Find(father[x]);        father[x]=temp;        return temp;    }    return x;}int krusal(int N, int P){    sort(edge+1,edge+P+1,cmp1);    int cost=0;    for(int i=0;i<=N;i++)    {        father[i]=i;    }    int cnt=0;    for(int i=1;i<=P;i++)    {        int fe=Find(edge[i].e);        int fs=Find(edge[i].s);        if(fs!=fe)        {            father[fs]=fe;            cost+=edge[i].comfort_time;            cnt++;        }        if(cnt==N-1)            break;    }    return cost;}int main(){    int N,P;    int cnt_time=0;    scanf("%d %d",&N,&P);    for(int i=1;i<=N;i++)        scanf("%d",&v[i]);    for(int i=1;i<=P;i++)    {        scanf("%d %d %d",&edge[i].e,&edge[i].s,&edge[i].comfort_time);        edge[i].comfort_time=2*edge[i].comfort_time+v[edge[i].e]+v[edge[i].s];    }    cnt_time+=krusal(N,P);    sort(v+1,v+N+1);    cnt_time+=v[1];    PRintf("%d/n",cnt_time);    return 0;}第一種想法的代碼(警戒自己):

#include<iostream>#include<cmath>#include<cstdlib>#include<cstring>#include<string>#include<algorithm>using namespace std;const int MAXN=100005;struct node{    int s;//始點    int e;//終點    int comfort_time;//邊權}edge[MAXN];//定義邊集數組struct vertex{    int weight;//點權    int postion;//輸入進來時候的位置}v[MAXN];//定義每個點自身花費的時間int father[MAXN];int flag[MAXN];//標記數組int du[MAXN];//頂點的度數bool cmp1(node a, node b)//頂點權重比較函數{    return a.comfort_time<b.comfort_time;}bool cmp2(vertex a, vertex b)//邊權比較函數{    return a.weight<b.weight;}bool check(int N)//檢查是否所有的點都已經遍歷完成{    for(int i=1;i<=N;i++)        if(!flag[i])            return false;    return true;}int Find(int x){    if(father[x]!=x)        father[x]=Find(father[x]);    return father[x];}void unionn(int x, int y){    int fa=Find(x);    int fb=Find(y);    if(fa!=fb)        father[x]=y;}int krusal(int N, int P){    sort(edge+1,edge+P+1,cmp1);    int cost=0;    memset(flag,false,sizeof(flag));    memset(du,0,sizeof(du));    for(int i=0;i<=N;i++)    {        father[i]=i;    }    int index=1;//選擇邊的下標    while(!check(N))    {        if(Find(edge[index].e)!=Find(edge[index].s))        {            unionn(edge[index].e,edge[index].s);            cost+=edge[index].comfort_time;            flag[edge[index].e]=true;            flag[edge[index].s]=true;            du[edge[index].e]++;            du[edge[index].s]++;        }        index++;    }    return cost;}int main(){    int N,P;    int cnt_time=0;    scanf("%d %d",&N,&P);    for(int i=1;i<=N;i++)    {        scanf("%d",&v[i].weight);        v[i].postion=i;    }    for(int i=1;i<=P;i++)    {        scanf("%d %d %d",&edge[i].e,&edge[i].s,&edge[i].comfort_time);    }    cnt_time+=2*krusal(N,P);    sort(v+1,v+N+1,cmp2);    cnt_time+=(du[v[1].postion]+1)*v[1].weight;    for(int i=2;i<=N;i++)    {        cnt_time+=du[v[i].postion]*v[i].weight;    }    printf("%d/n",cnt_time);    return 0;}


上一篇:sqlite入門基礎

下一篇:共享文件問題

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美电影在线播放| 尤物tv国产一区| 精品女厕一区二区三区| 亚洲欧美日韩一区二区在线| 一本色道久久88综合日韩精品| 久久99国产精品久久久久久久久| 成人国产精品色哟哟| 精品一区二区三区四区| 欧美激情一区二区三区高清视频| 亚洲色图色老头| 久久久亚洲影院| 久久中文字幕国产| 夜夜狂射影院欧美极品| 久久偷看各类女兵18女厕嘘嘘| 欧美日韩国产成人| 久久国产天堂福利天堂| 欧美日韩国产91| 68精品国产免费久久久久久婷婷| 亚洲xxxxx性| 日韩欧美主播在线| 久久精品国产亚洲精品| 91精品国产综合久久久久久蜜臀| 国产精品一区二区在线| 中文字幕久久久| 亚洲天堂网站在线观看视频| 久久精品视频99| 国产视频久久久| 日韩欧美国产网站| 欧美电影免费观看高清完整| 日韩经典第一页| 精品国产成人av| 国产又爽又黄的激情精品视频| 57pao成人国产永久免费| 久久露脸国产精品| 欧美激情一级二级| 亚洲国产另类 国产精品国产免费| 国产成人免费91av在线| 高清一区二区三区日本久| 亚洲成人教育av| 欧美一级成年大片在线观看| 浅井舞香一区二区| 国产精品毛片a∨一区二区三区|国| 国产精品久久久久7777婷婷| 日韩欧美高清视频| 欧美成人免费va影院高清| 永久免费毛片在线播放不卡| 欧美国产精品人人做人人爱| 成人妇女免费播放久久久| 88xx成人精品| 久热在线中文字幕色999舞| 久久精品国产96久久久香蕉| 精品久久久久久中文字幕大豆网| 欧美成年人视频| 欧美激情图片区| 日韩电影中文字幕一区| 欧美日韩在线观看视频小说| 国产精品白丝av嫩草影院| 精品国产网站地址| 亚洲免费高清视频| 国产精品国产三级国产aⅴ浪潮| 日韩欧美亚洲综合| 91国自产精品中文字幕亚洲| 深夜福利亚洲导航| 久久综合免费视频| 亚洲2020天天堂在线观看| 国产精品v片在线观看不卡| 成人免费福利视频| 国产精品久久久久久久久久久久久久| 午夜免费日韩视频| 久久午夜a级毛片| 国产成人av网址| 成人av在线天堂| 久久久人成影片一区二区三区| 超薄丝袜一区二区| 国产精品久久久久久久久男| 国产精品第100页| 国产成人在线播放| 国产99久久久欧美黑人| 精品福利樱桃av导航| 91精品中国老女人| 亚洲白拍色综合图区| 精品国产一区二区三区在线观看| 亚洲a区在线视频| 久久久久久久久爱| 国产欧美日韩最新| 久久精品中文字幕一区| 在线性视频日韩欧美| 国产精品视频精品| 国产精品日韩在线一区| 欧美另类精品xxxx孕妇| 日韩欧美在线视频观看| 成人妇女淫片aaaa视频| 亚洲国产日韩欧美综合久久| 亚洲精品在线观看www| 4438全国亚洲精品在线观看视频| 69久久夜色精品国产7777| 少妇精69xxtheporn| 久久久久免费精品国产| 韩国一区二区电影| 欧美精品一区二区免费| 国产区精品在线观看| 亚洲欧美一区二区三区四区| 亚洲精品中文字幕有码专区| 午夜精品久久久久久久99热| 91久久精品日日躁夜夜躁国产| 欧美成人午夜激情在线| 97视频在线免费观看| 国产精品视频久久久久| 精品亚洲aⅴ在线观看| 久操成人在线视频| 欧美在线欧美在线| 亚洲有声小说3d| 日韩电影网在线| 国内免费久久久久久久久久久| 国模吧一区二区| 亚洲国产精品女人久久久| 亚洲视屏在线播放| 日韩在线中文字幕| 美女国内精品自产拍在线播放| 91国在线精品国内播放| 欧美成人国产va精品日本一级| 国产精品一香蕉国产线看观看| 国产精品久久久久秋霞鲁丝| 国产成人亚洲综合91| 国产精品扒开腿做爽爽爽男男| 久久久亚洲影院你懂的| 欧美日韩激情美女| 亚洲免费小视频| 亚洲大胆人体在线| 91亚洲精品久久久久久久久久久久| 精品亚洲aⅴ在线观看| 亚洲国模精品一区| 日韩精品极品视频| 国产剧情久久久久久| 精品国产福利在线| 国产精品一区电影| 国产一区香蕉久久| 久久韩国免费视频| 97视频免费在线看| 91久久精品美女高潮| 狠狠做深爱婷婷久久综合一区| 国外色69视频在线观看| 国内精品模特av私拍在线观看| 国产日韩欧美中文| 91网站在线看| 色一情一乱一区二区| 亚洲电影成人av99爱色| 久久韩剧网电视剧| 狠狠躁18三区二区一区| 亚洲男人天堂九九视频| 91精品国产高清久久久久久久久| 国产精品久久网| 欧美精品久久一区二区| 成人激情在线播放| www.日韩不卡电影av| 超薄丝袜一区二区| 国产欧美一区二区| 亚洲乱码av中文一区二区| 日韩av色在线| 久久精品影视伊人网| 最近免费中文字幕视频2019| 国产精品久久久一区| 欧美裸体xxxx| 亚洲理论片在线观看|