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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【AT2434】JOI 公園 (JOI Park) 最短路+贪心

發布時間:2025/5/22 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【AT2434】JOI 公園 (JOI Park) 最短路+贪心 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題解

我的歪解

我首先想的是分治,我想二分肯定不行,因為它是沒有單調性的。

我想了一下感覺它的大部分數據應該是有凸性的(例如\(y=x^2\)的函數圖像),所以可以三分。

下面是我的三分代碼(騙了不少分)

三分模板沒過的我居然瞎歪歪了一個三分

歪解code:

#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cctype> #include<queue> #define ll long long #define R register #define N 400005 #define INF 0x7fffffffffffLL using namespace std; template<typename T>inline void read(T &a){char c=getchar();T x=0,f=1;while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}a=f*x; } ll n,m,c,tot,h[N],vis[N],pd[N]; ll dist[N],sum,now_ans,now; struct bian{int u,v;ll w; }b[N]; struct node{int nex,to;ll dis; }edge[N<<1]; inline void add(R int u,R int v,R ll w){edge[++tot].nex=h[u];edge[tot].to=v;edge[tot].dis=w;h[u]=tot; } inline void spfa(R int s){for(R int i=1;i<=n;i++)dist[i]=INF;queue<int> q;q.push(s);dist[s]=0;vis[s]=1;while(!q.empty()){R int x=q.front();q.pop();vis[x]=0;for(R int i=h[x];i;i=edge[i].nex){R int xx=edge[i].to;if(dist[xx]>dist[x]+edge[i].dis){dist[xx]=dist[x]+edge[i].dis;if(!vis[xx]){vis[xx]=1;q.push(xx);}}} } } inline ll check(R ll mid){ll tot=0;for(R int i=1;i<=n;i++)pd[i]=0;for(R int i=1;i<=n;i++)if(dist[i]<=mid)pd[i]=1;for(R int i=1;i<=m;i++)if(pd[b[i].u]&&pd[b[i].v])tot+=b[i].w;return tot-mid*c;//這是你能節省的 } int main(){ read(n);read(m);read(c);for(R int i=1;i<=m;i++){read(b[i].u);read(b[i].v);read(b[i].w);add(b[i].u,b[i].v,b[i].w);add(b[i].v,b[i].u,b[i].w);sum+=b[i].w;}spfa(1);R ll l=0,r=sum;while(l<=r){R ll tmp=(r-l)/3;R ll mid1=l+tmp;R ll mid2=r-tmp;if(check(mid1)>check(mid2)) r=mid2-1;else l=mid1+1;}ll tmp=check(l),temp=check(r);if(tmp>temp)now=l,now_ans=tmp;else now=r,now_ans=temp;printf("%lld\n",sum-now_ans);return 0; }

當然了,三分本來就是一個非常好的騙分算法(也會是正解),有些題在加一些暴力,一定會有神奇的效果;

講課老師說加上暴力這道題應該可以\(A\)掉,但懶惰的我并沒有去實踐,有興趣的可以試一試;

正解

這其實是一道經典的最短路的一種題型。

先跑一遍\(SPFA\),處理出\(dist\)數組;

然后再利用\(dist\)數組處理出每一條邊的\(maxdis\);

\(maxdis\)數組從小到大排序(結構體排序);

看完圖應該都懂了吧。

code:

#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cctype> #include<queue> #define ll long long #define R register #define N 800005 #define int long long #define INF 9999999999999999LL using namespace std; template<typename T>inline void read(T &a){char c=getchar();T x=0,f=1;while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}a=f*x; } ll n,m,c,tot,h[N],vis[N],pd[N],maxdis[N]; ll dist[N],sum,ans,maxsum; struct bian{int u,v,w; }b[N]; struct node{int nex,to,dis; }edge[N<<1]; struct MAX{int maxdis,id;friend bool operator < (const MAX &a,const MAX &b){return a.maxdis<b.maxdis;} }md[N]; inline void add(R int u,R int v,R int w){edge[++tot].nex=h[u];edge[tot].to=v;edge[tot].dis=w;h[u]=tot; } inline void spfa(R int s){for(R int i=1;i<=n;i++)dist[i]=INF;queue<int> q;q.push(s);dist[s]=0;vis[s]=1;while(!q.empty()){R int x=q.front();q.pop();vis[x]=0;for(R int i=h[x];i;i=edge[i].nex){R int xx=edge[i].to;if(dist[xx]>dist[x]+edge[i].dis){dist[xx]=dist[x]+edge[i].dis;if(!vis[xx]){vis[xx]=1;q.push(xx);}}} } } signed main(){ read(n);read(m);read(c);for(R int i=1;i<=m;i++){read(b[i].u);read(b[i].v);read(b[i].w);add(b[i].u,b[i].v,b[i].w);add(b[i].v,b[i].u,b[i].w);sum+=b[i].w;}spfa(1);for(R int i=1;i<=m;i++)md[i].maxdis=max(dist[b[i].u],dist[b[i].v]),md[i].id=i;sort(md+1,md+1+m);ans=sum;for(R int i=1;i<=m;i++){sum-=b[md[i].id].w;ans=min(ans,1LL*md[i].maxdis*c+sum);}printf("%lld\n",ans);return 0; }

轉載于:https://www.cnblogs.com/ZAGER/p/9817918.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的【AT2434】JOI 公園 (JOI Park) 最短路+贪心的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产亚洲女人久久久久毛片 | 蜜臀尤物一区二区三区直播 | 黄色污在线观看 | 99综合久久 | 中文字幕黄色av | 男女拍拍拍网站 | 国产在线精品一区二区三区 | 日韩国产电影 | 永久国产 | www.五月天婷婷.com | 久久艹在线观看 | 我的邻居在线观看 | 欧美日韩蜜桃 | 精品国产乱码一区二区三区99 | 韩国三级av | 丰满女人又爽又紧又丰满 | 成人av网站大全 | 亚洲综合网址 | 中文字幕 亚洲一区 | 探花国产精品一区二区 | 97黄色片 | 国产精品久久久99 | 在线成人毛片 | 好好热视频 | 国产老女人精品毛片久久 | 成人av免费在线播放 | 青青草精品视频 | 日韩三级中文字幕 | 污视频免费在线观看网站 | 另类专区欧美 | 在线视频免费观看 | 北条麻妃一区二区三区免费 | 天天躁日日躁狠狠躁欧美 | 无码粉嫩虎白一线天在线观看 | 成年人网站免费视频 | 狠狠干五月天 | 黑白配高清国语在线观看 | wwwwxxxxx日本| 男男一级淫片免费播放 | 日日日插插插 | 欧美一二| 亚洲国产系列 | 日韩一区二区在线免费观看 | 国产黄片一区二区三区 | 中文字幕无码av波多野吉衣 | 牛夜精品久久久久久久99黑人 | 摸摸摸bbb毛毛毛片 午夜爽爽影院 | 五月天视频网 | 三日本三级少妇三级99 | 天堂av网址 | 99福利 | 伊人毛片 | 尤物视频在线观看国产 | 蜜臀网在线 | jlzzjlzz亚洲女人18| 国产精品mm | 在线免费观看污网站 | 成人av18 | 日韩亚洲天堂 | 成人一区二区三区视频 | 九九视屏 | 国产永久免费视频 | 99ri国产在线 | 高清国产午夜精品久久久久久 | 欧美老熟妇又粗又大 | 国产精品探花一区二区在线观看 | 一本一道久久a久久 | 婷婷在线视频观看 | 在线观看三级视频 | 福利小视频在线观看 | 欧美又粗又大aaa片 老熟妇仑乱视频一区二区 亚洲妇女体内精汇编 | 播放美国生活大片 | 四虎永久在线精品免费网址 | 秋霞成人午夜伦在线观看 | 123毛片 | 欧美综合亚洲图片综合区 | 性高潮久久久久久久 | 中文字幕另类 | 欧美成人综合网站 | 九九九热视频 | 一本一道精品欧美中文字幕 | 中文字幕永久免费 | 精品小视频在线观看 | 国产精品97 | 人人澡人人爽 | a级免费观看 | 久久精品婷婷 | 一区二区视频在线看 | 亚洲一区二区91 | 中文字幕一区二区三区四区免费看 | 欧美日韩在线观看一区二区三区 | 福利视频在线免费观看 | 亚洲国产精品久久久 | 好吊在线视频 | 日韩一区在线免费观看 | 激情综合啪啪 | 色噜噜狠狠狠综合曰曰曰 | 亚洲 欧美 变态 另类 综合 | 天堂网8 |