多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > UvaLive 6534 Join two kingdoms 樹形DP+二分

UvaLive 6534 Join two kingdoms 樹形DP+二分

來源:程序員人生   發布時間:2014-10-04 08:00:00 閱讀次數:3558次

鏈接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4545

題意:兩個國家A,B,分別有N座城市和Q座城市(1 ≤ N, Q ≤ 4 × 10^4),每個國家里的城市都是樹形結構,每條邊的權值都是1。現在要隨機從兩個國家中各選擇一個城市來將兩個國家連接起來,問連接起來的大國家里面的最長路的期望是多少。

思路:首先用樹形DP找出所有點在本國里的能找到的最遠距離,并且記錄所有最遠距離里的最長距離len。然后將B的所有最長路排序,并且對于A的每座城市,當A選擇該座城市時,對于B的每座城市得到的最長路是max(len,dp_a[i][0]+dp_b[j][0]+1),其中dp_a[i][0],dp_b[j][0]分別代表這兩座城市能找到的最遠距離。用二分找到滿足dp_a[i][0]+dp_b[j][0]+1>len的位置,比這個位置大的長度就是dp_a[i][0]+dp_b[j][0]+1,起來的就是len。這樣就可以求得期望了。

代碼:

#include <algorithm> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> #include <ctype.h> #include <iostream> #include <map> #include <queue> #include <set> #include <stack> #include <string> #include <vector> #define eps 1e-8 #define INF 0x7fffffff #define maxn 40005 #define PI acos(-1.0) #define seed 31//131,1313 typedef long long LL; typedef unsigned long long ULL; using namespace std; int from_a[maxn],head_a[maxn],top_a; int from_b[maxn],head_b[maxn],top_b; double dp_a[maxn][2], dp_b[maxn][2]; double aa[maxn],bb[maxn]; struct Edge { int v; int next; } edge_a[maxn*2],edge_b[maxn*2]; void init() { memset(head_a,-1,sizeof(head_a)); memset(dp_a,0,sizeof(dp_a)); memset(head_b,-1,sizeof(head_b)); memset(dp_b,0,sizeof(dp_b)); top_a=0; top_b=0; } void add_edge_a(int u,int v) { edge_a[top_a].v=v; edge_a[top_a].next=head_a[u]; head_a[u]=top_a++; } void add_edge_b(int u,int v) { edge_b[top_b].v=v; edge_b[top_b].next=head_b[u]; head_b[u]=top_b++; } void dfs_first(int u,int f,int head[],Edge edge[],int from[],double dp[][2]) { from[u]=u; for(int i=head[u]; i!=-1; i=edge[i].next) { int v=edge[i].v; if(v==f) continue; dfs_first(v,u,head,edge,from,dp); if(dp[v][0]+1>dp[u][0]) { from[u]=v; dp[u][1]=dp[u][0]; dp[u][0]=dp[v][0]+1; } else if(dp[v][0]+1>dp[u][1]) dp[u][1]=dp[v][0]+1; } } void dfs_second(int u,int f,int from[],double dp[][2],int head[],Edge edge[]) { if(u!=f) if(from[f]!=u) { if(dp[f][0]+1>dp[u][0]) { from[u]=f; dp[u][1]=dp[u][0]; dp[u][0]=dp[f][0]+1; } else if(dp[f][0]+1>dp[u][1]) dp[u][1]=dp[f][0]+1; } else { if(dp[f][1]+1>dp[u][0]) { from[u]=f; dp[u][1]=dp[u][0]; dp[u][0]=dp[f][1]+1; } else if(dp[f][1]+1>dp[u][1]) dp[u][1]=dp[f][1]+1; } for(int i=head[u]; i!=-1; i=edge[i].next) { int v=edge[i].v; if(v==f) continue; dfs_second(v,u,from,dp,head,edge); } } int main() { int T_a,T_b; while(~scanf("%d%d",&T_a,&T_b)) { init(); for(int i=1;i<=T_a-1;i++) { int u,v; scanf("%d%d",&u,&v); add_edge_a(u,v); add_edge_a(v,u); } dfs_first(1,1,head_a,edge_a,from_a,dp_a); dfs_second(1,1,from_a,dp_a,head_a,edge_a); for(int i=1;i<=T_b-1;i++) { int u,v; scanf("%d%d",&u,&v); add_edge_b(u,v); add_edge_b(v,u); } dfs_first(1,1,head_b,edge_b,from_b,dp_b); dfs_second(1,1,from_b,dp_b,head_b,edge_b); double cc=0; double ans=0; for(int i=1;i<=T_a;i++) { if(dp_a[i][0]>cc) cc=dp_a[i][0]; } for(int i=1;i<=T_b;i++) { bb[i]=dp_b[i][0]; if(bb[i]>cc) cc=bb[i]; } sort(bb+1,bb+T_b+1); double S[maxn]; S[1]=bb[1]; for(int i=2;i<=T_b;i++) { S[i]=S[i-1]+bb[i]; } for(int i=1;i<=T_a;i++) { int pos=lower_bound(bb+1,bb+T_b+1,cc-dp_a[i][0]-1)-bb; ans+=(double)(pos-1)*cc; ans+=(T_b-pos+1)*(dp_a[i][0]+1)+S[T_b]-S[pos-1]; } printf("%.3f ",ans/((double)T_a*T_b)+eps); } return 0; }


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 性国产 | 国产成人精品久久一区二区小说 | 欧美在线高清 | 宇都宫紫苑野外中文字幕 | 天天更新天天久久久更新影院 | 在线亚州| 波多野结衣四虎 | 中文字幕2区 | 欧美性受xxxx喷水大胸 | 波多野结衣久久高清免费 | 国产精品久久亚洲一区二区 | 久操免费在线 | 日日摸人人拍人人澡 | 国产香蕉一区二区在线网站 | 波多野结衣xxxx性精品 | 国产日韩欧美一区二区三区视频 | www.亚色| 午夜爽爽爽视频 | 日韩欧美高清视频 | 精品中文字幕不卡在线视频 | 国产高清免费视频 | 波多野结衣免费线在线 | 春色视频免费版高清在线观看 | 国产女乱淫真高清免费视频 | 亚洲天堂网在线播放 | 亚洲国产成a人v在线 | 久操视频网 | 欧美精品久久 | 最近中文字幕视频在线资源 | 亚洲国产成人99精品激情在线 | 校园激情春色 | 一级aaaaaa毛片免费同男同女 | 性精品| 精品国产一区二区三区久久影院 | 日本不卡网| 国产精品亚洲精品久久成人 | 亚洲已满18点击进入在线观看 | 欧美性美| 高清欧美性猛交xxxx黑人猛交 | 成人永久福利在线观看不卡 | 欧美亚洲国产精品第一页 |