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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【codevs2488】绿豆蛙的归宿

發(fā)布時(shí)間:2024/7/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【codevs2488】绿豆蛙的归宿 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

這個(gè)題開始正向拓?fù)渑判?#xff0c;然后各種wa,心灰意冷,找了個(gè)題解,和同學(xué)研究了半天,甚至曾經(jīng)一度認(rèn)為題解是錯(cuò)的。

這個(gè)題正向反向應(yīng)該都無所謂,但是我實(shí)在是蒻,打了半天正向都沒打過去,最后跟隨dalao的步伐走向了反向拓?fù)?/p> #include<iostream> #include<cstring> #include<cstdio> #include<queue> #include<stack> using namespace std; int n,m,x,y,z,head[100010],tail,ru[100010],chu[100010]; bool flag[100010]; double ans[100010]; queue<int>qwq; struct in {int to,ne,co; }ter[200020]; inline void build(int f,int l,int c) {ter[++tail]=(in){l,head[f],c},head[f]=tail; } int main() {memset(head,-1,sizeof(head));scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d%d%d",&x,&y,&z),build(y,x,z),ru[x]++,chu[x]++;//反向建圖,因?yàn)閺?跑不到的點(diǎn)肯定反向建圖也跑不到1 for(int i=1;i<=n;i++)if(!ru[i])//如果原圖該點(diǎn),沒有出邊(終點(diǎn)) qwq.push(i);while(!qwq.empty()){int qaq=qwq.front();qwq.pop();//這里可以換成棧,跑的還更快,雖然我不知道為啥 for(int i=head[qaq];i>0;i=ter[i].ne){int t=ter[i].to;double gai=1.0/chu[t];ans[t]+=(ans[qaq]+ter[i].co)*gai;//求期望的必要步驟嘛qwq ru[t]--;if(!ru[t])qwq.push(t);} }for(int i=1;i<=n;i++)printf("%.2lf ",ans[i]);//printf("%.2lf",ans[1]); } /*關(guān)于這個(gè)反向拓?fù)渑判蚩梢缘脑?因?yàn)槊恳粋€(gè)點(diǎn)都可以到達(dá)終點(diǎn),所以無論正向反向,所有的從1到n的路徑的期望值都不會(huì)變 所以正向反向無所謂 為什么要用拓?fù)渑判?因?yàn)橹挥幸粋€(gè)點(diǎn)所有到他的邊都被走過,關(guān)于到它的期望值才算真正確定 */ #include<iostream> #include<cstring> #include<cstdio> #include<queue> #include<stack> using namespace std; int n,m,x,y,z,head[100010],tail,ru[100010],chu[100010]; bool flag[100010]; double ans[100010]; queue<int>qwq; struct in {int to,ne,co; }ter[200020]; inline void build(int f,int l,int c) {ter[++tail]=(in){l,head[f],c},head[f]=tail; } int main() {memset(head,-1,sizeof(head));scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d%d%d",&x,&y,&z),build(y,x,z),ru[x]++,chu[x]++;//反向建圖,因?yàn)閺?跑不到的點(diǎn)肯定反向建圖也跑不到1 for(int i=1;i<=n;i++)if(!ru[i])//如果原圖該點(diǎn),沒有出邊(終點(diǎn)) qwq.push(i);while(!qwq.empty()){int qaq=qwq.front();qwq.pop();//這里可以換成棧,跑的還更快,雖然我不知道為啥 for(int i=head[qaq];i>0;i=ter[i].ne){int t=ter[i].to;double gai=1.0/chu[t];ans[t]+=(ans[qaq]+ter[i].co)*gai;//求期望的必要步驟嘛qwq ru[t]--;if(!ru[t])qwq.push(t);} }for(int i=1;i<=n;i++)printf("%.2lf ",ans[i]);//printf("%.2lf",ans[1]); } /*關(guān)于這個(gè)反向拓?fù)渑判蚩梢缘脑?因?yàn)槊恳粋€(gè)點(diǎn)都可以到達(dá)終點(diǎn),所以無論正向反向,所有的從1到n的路徑的期望值都不會(huì)變 所以正向反向無所謂 為什么要用拓?fù)渑判?因?yàn)橹挥幸粋€(gè)點(diǎn)所有到他的邊都被走過,關(guān)于到它的期望值才算真正確定 */ #include<iostream> #include<cstring> #include<cstdio> #include<queue> #include<stack> using namespace std; int n,m,x,y,z,head[100010],tail,ru[100010],chu[100010]; bool flag[100010]; double ans[100010]; queue<int>qwq; struct in {int to,ne,co; }ter[200020]; inline void build(int f,int l,int c) {ter[++tail]=(in){l,head[f],c},head[f]=tail; } int main() {memset(head,-1,sizeof(head));scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d%d%d",&x,&y,&z),build(y,x,z),ru[x]++,chu[x]++;//反向建圖,因?yàn)閺?跑不到的點(diǎn)肯定反向建圖也跑不到1 for(int i=1;i<=n;i++)if(!ru[i])//如果原圖該點(diǎn),沒有出邊(終點(diǎn)) qwq.push(i);while(!qwq.empty()){int qaq=qwq.front();qwq.pop();//這里可以換成棧,跑的還更快,雖然我不知道為啥 for(int i=head[qaq];i>0;i=ter[i].ne){int t=ter[i].to;double gai=1.0/chu[t];ans[t]+=(ans[qaq]+ter[i].co)*gai;//求期望的必要步驟嘛qwq ru[t]--;if(!ru[t])qwq.push(t);} }for(int i=1;i<=n;i++)printf("%.2lf ",ans[i]);//printf("%.2lf",ans[1]); } /*關(guān)于這個(gè)反向拓?fù)渑判蚩梢缘脑?因?yàn)槊恳粋€(gè)點(diǎn)都可以到達(dá)終點(diǎn),所以無論正向反向,所有的從1到n的路徑的期望值都不會(huì)變 所以正向反向無所謂 為什么要用拓?fù)渑判?因?yàn)橹挥幸粋€(gè)點(diǎn)所有到他的邊都被走過,關(guān)于到它的期望值才算真正確定 */

?

轉(zhuǎn)載于:https://www.cnblogs.com/Loi-dfkdsmbd/articles/7706082.html

總結(jié)

以上是生活随笔為你收集整理的【codevs2488】绿豆蛙的归宿的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。