日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

COGS 613 火车站饭店

發布時間:2024/1/8 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 COGS 613 火车站饭店 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

613. 火車站飯店

★☆?? 輸入文件: profitz.in?? 輸出文件: profitz.out??? 簡單對比
時間限制:1 s?? 內存限制:128 MB

【題目描述】

政府邀請了你在火車站開飯店,但不允許同時在兩個相連的火車站開。任意兩個火車站有且只有一條路徑,每個火車站最多有 50 個和它相連接的火車站。

告訴你每個火車站的利潤,問你可以獲得的最大利潤為多少?

例如下圖是火車站網絡:

最佳投資方案是 1 , 2 , 5 , 6 這 4 個火車站開飯店可以獲得的利潤為 90.

【輸入格式】

第一行輸入整數 N(<=100000), 表示有 N 個火車站,分別用 1,2,……..,N 來編號。接下來 N 行,每行一個整數表示每個站點的利潤,接下來 N-1 行描述火車站網絡,每行兩個整數,表示相連接的兩個站點。

【輸出格式】

輸出一個整數表示可以獲得的最大利潤。

【樣例輸入】

6?
10?
20?
25?
40?
30?
30?
4 5?
4 6?
3 4?
1 3?
2 3

【樣例輸出】

90



樹形DP 此題不需要轉化成二叉樹(其實我也不會......)

由兒子的最大值推得父親的最大值

原來寫過一個類似的 ?上司的舞會


而且這次也寫saca了

存反向邊一開始s數組開的不夠 導致RE7組

#include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<cstdlib> #include<ctime> using namespace std; const int lim=100011; int m,root,z; int d[lim]; struct self{int x,y;}s[lim*2]; int first[lim*2],nxt[lim*2];vector<int>g[lim]; int a,b,c; int f[lim][2]; bool flag[lim];void maketree(int i) {flag[i]=1;for(int e=first[i];e!=-1;e=nxt[e])if(!flag[s[e].y]){g[i].push_back(s[e].y);maketree(s[e].y);} }int work(int i,int chosen) {if(f[i][chosen]!=-1)return f[i][chosen];if(chosen==0){f[i][chosen]=0;for(int k=0;k<g[i].size();k++)f[i][chosen]+=max(work(g[i][k],0),work(g[i][k],1));return f[i][chosen];}f[i][chosen]=d[i];for(int k=0;k<g[i].size();k++)f[i][chosen]+=work(g[i][k],0);return f[i][chosen]; }int main() {srand(time(NULL));freopen("profitz.in","r",stdin);freopen("profitz.out","w",stdout);memset(first,-1,sizeof(first));memset(nxt,-1,sizeof(nxt));memset(f,-1,sizeof(f));scanf("%d",&m);for(a=1;a<=m;a++)scanf("%d",&d[a]);for(a=1;a<m;a++){scanf("%d%d",&s[a].x,&s[a].y);s[a+m].x=s[a].y;s[a+m].y=s[a].x;nxt[a]=first[s[a].x];first[s[a].x]=a;nxt[a+m]=first[s[a].y];first[s[a].y]=a+m;}root=rand()%m+1;maketree(root);z=max(work(root,0),work(root,1));cout<<z<<'\n';return 0; }

總結

以上是生活随笔為你收集整理的COGS 613 火车站饭店的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。