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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

LOJ:黑暗城堡(最短路)

發布時間:2023/12/3 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LOJ:黑暗城堡(最短路) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

求一個圖關于1的最小路徑樹的方案數

解析

想復雜了qwq
跑dij的時候如果dis[now]+w==dis[to],就使cnt[to]++
如果更新dis,cnt賦值成1
最后乘起來即可
本題可以這樣應該是因為由于邊權均正,所以所有點的選取方案是獨立
所以直接上乘法即可

代碼

#include<bits/stdc++.h> using namespace std; #define ll long long #define il inline const int N=1e6+100; const int M=150; const int mod=2147483647; const double eps=1e-6; inline ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f; } int n,m; struct node{int to,nxt,w; }p[N]; int fi[N],cnt; void addline(int x,int y,int w){p[++cnt]=(node){y,fi[x],w};fi[x]=cnt;return; } int dis[N],num[N]; typedef pair<int,int> pr; #define mkp make_pair priority_queue<pr,vector<pr>,greater<pr> >q; bool vis[N]; void dij(){memset(dis,0x3f,sizeof(dis));dis[1]=0;q.push(mkp(0,1));while(!q.empty()){int now=q.top().second;q.pop();if(vis[now]) continue;vis[now]=1;for(int i=fi[now];~i;i=p[i].nxt){int to=p[i].to;if(dis[to]>dis[now]+p[i].w){dis[to]=dis[now]+p[i].w;num[to]=1;q.push(mkp(dis[to],to));}else if(dis[to]==dis[now]+p[i].w) num[to]++;}} } int main(){memset(fi,-1,sizeof(fi));cnt=-1;n=read();m=read();for(int i=1;i<=m;i++){int x=read(),y=read(),z=read();addline(x,y,z);addline(y,x,z);}dij();ll ans=1;for(int i=2;i<=n;i++) (ans*=num[i])%=mod;printf("%lld\n",ans);return 0; } /* 4 5 3 3 1 9 5 5 5 2 2 2 1 1 1 */ 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的LOJ:黑暗城堡(最短路)的全部內容,希望文章能夠幫你解決所遇到的問題。

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