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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

dtoj#4178. 配对(pair)

發布時間:2025/3/21 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dtoj#4178. 配对(pair) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述:

由于 zzq 太懶了,所以這題沒有題目背景。

有一棵樹,樹上有 n 個點,每條邊上有一個非負邊權。

在這 n 個點中有 k 個特殊點,其中 k 為偶數。定義兩個點的距離為它們在樹上的簡單路徑上的邊權之和。你需要將這 k 個點配成k/2個互不相交的對,并最大化每一對點的距離之和。

思路:

一個結論,這k條路經至少會交于一個公共點,可以證明如果沒有交于一點一定存在一個更優的方案并且交于一點。

于是考慮去求所有選中的點到相交點的距離,動態維護距離,同時要保證擁有最多選中點的子樹大小<=k/2,否則會有路徑無法交于相交點。

以下代碼:

#include<bits/stdc++.h> #define il inline #define LL long long #define _(d) while(d(isdigit(ch=getchar()))) using namespace std; const int N=1e5+5; bool f[N]; LL ans,dist[N],S; int dfn[N],id,sz[N],mx[N],sum[N],out[N],rt,a[N]; int n,k,head[N],ne[N<<1],to[N<<1],w[N<<1],cnt; il int read(){int x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch^48;_()x=(x<<1)+(x<<3)+(ch^48);return f*x; } il void insert(int x,int y,int z){ne[++cnt]=head[x];head[x]=cnt;to[cnt]=y;w[cnt]=z; } il void dfs1(int x,int fa){dfn[x]=++id;sz[x]=f[x];sum[id]=sum[id-1]+f[x];if(f[x])S+=dist[x];for(int i=head[x];i;i=ne[i]){if(to[i]==fa)continue;dist[to[i]]=dist[x]+w[i];dfs1(to[i],x);sz[x]+=sz[to[i]];mx[x]=max(mx[x],sz[to[i]]);}mx[x]=max(mx[x],k-sz[x]);out[x]=id; } il void dfs2(int x,int fa){if(mx[x]*2<=k&&ans<S)ans=S,rt=x;for(int i=head[x];i;i=ne[i]){if(fa==to[i])continue;int tot=sum[out[to[i]]]-sum[dfn[to[i]]-1];S+=1ll*(k-(tot<<1))*w[i];dfs2(to[i],x);S-=1ll*(k-(tot<<1))*w[i];} } int tt=0; vector<int> v[N]; struct node{int x,d,id;bool operator<(const node&t1)const{return d<t1.d;} }; priority_queue<node> q; il void dfs3(int x,int fa){if(f[x])v[tt].push_back(x);for(int i=head[x];i;i=ne[i]){if(fa==to[i])continue;dfs3(to[i],x);} } int main() {n=read();k=read();for(int i=1;i<n;i++){int x=read(),y=read(),z=read();insert(x,y,z);insert(y,x,z);}for(int i=1;i<=k;i++)a[i]=read(),f[a[i]]=1;dfs1(1,0);dfs2(1,0);if(f[rt])v[++tt].push_back(rt);for(int i=head[rt];i;i=ne[i])++tt,dfs3(to[i],rt);for(int i=1;i<=tt;i++){int x=v[i].size();if(!x)continue;q.push((node){v[i][x-1],x-1,i});}for(int i=1;i<=(k>>1);i++){node a=q.top();q.pop();node b=q.top();q.pop();printf("%d %d\n",a.x,b.x);if(a.d>=1)q.push((node){v[a.id][a.d-1],a.d-1,a.id});if(b.d>=1)q.push((node){v[b.id][b.d-1],b.d-1,b.id});}return 0; } View Code

?

轉載于:https://www.cnblogs.com/Jessie-/p/10416047.html

總結

以上是生活随笔為你收集整理的dtoj#4178. 配对(pair)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 91tv在线| 波多野吉衣一区二区 | 国产乱子一区二区 | 日韩在线视频二区 | 四虎少妇做爰免费视频网站四 | 97caocao| 91av在线免费观看 | 久草视频在线资源 | 精品国产乱码久久久久久闺蜜 | 国产高清一区在线观看 | 成年人在线免费 | 激情综合网av | 青青青在线 | 极品五月天 | 一级黄色大片视频 | 欧美一级黄色片视频 | 欧美一级做a爰片久久高潮 久热国产精品视频 | 日本50路肥熟bbw | 精品视频一区二区在线 | 天天爽天天 | 国产精品无码中文 | 精品人妻少妇嫩草av无码专区 | 男人天堂2014| 欧美久久久久久 | 久久国产黄色片 | 欧美色图亚洲天堂 | 天堂网av2014 | 天天操操操操 | 色欲AV无码精品一区二区久久 | 三级免费黄录像 | 国产香蕉精品视频 | 免费看又黄又无码的网站 | 男人操女人视频网站 | 久草免费在线视频 | 又粗又猛又爽又黄的视频 | 亚洲一区第一页 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 天天操天 | 禁断介护老人中文字幕 | 91插插影库 | 国产成人精品一区二区三区福利 | 波多野结衣www | 欧美精品aa | 成人网在线视频 | www.日日日| 91精品国产欧美一区二区成人 | 亚洲乱码国产乱码精品精剪 | 2018狠狠干 | 看全黄大色黄大片美女人 | 亚洲AV无码成人精品区明星换面 | 老司机深夜视频 | 性高潮久久久久久 | 久久看片网| 麻豆传媒网站 | 黄瓜视频在线播放 | 亚洲精选国产 | 欧性猛交ⅹxxx乱大交 | 无码人妻丰满熟妇啪啪网站 | 2019天天干天天操 | 老司机激情影院 | 国产一区二区内射 | 国产精品极品白嫩在线 | 欧美日韩在线一区二区三区 | 午夜免费福利在线 | 亚洲精华国产精华精华液网站 | 欧美黄色免费 | 丝袜福利视频 | 九九热视频在线免费观看 | 91成人精品国产刺激国语对白 | 日本午夜小视频 | 国产精品xxxx | 中文字幕日韩精品无码内射 | 日韩免费看片 | 日韩二区在线观看 | 亚洲精品久久视频 | 粉嫩av一区二区三区免费观看 | 精品一区二区三区中文字幕 | 日韩字幕在线观看 | 欧美特级黄色 | 伊人久久国产 | 99热偷拍| 亚洲视频在线免费 | 欧美18免费视频 | 极品白嫩丰满美女无套 | 亚洲欧洲在线播放 | 中文字幕亚洲国产 | 亚洲v | 欧美色亚洲 | 亚洲xxxx视频 | 午夜影院啊啊啊 | 99re久久精品国产 | 亚洲熟女乱色一区二区三区久久久 | 日b视频免费 | 午夜福利三级理论电影 | 黄色片视频免费 | 久久久久国产一区二区三区潘金莲 | 在线成人免费电影 | 欧美在线va | 午夜视频观看 |