栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3408 Gao

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3408 Gao

#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <algorithm>using namespace std;typedef long long LL;#define INF (1<<30)const int N=10050;const LL mod=10000000000LL;int n,m,q;int head[N],tot;LL dp[2][N];int dis[N],ord[N];struct Edge{int v,w,pre;Edge(){}Edge(int a,int b,int c){v=a;w=b;pre=c;}}edge[N*10];void addEdge(int u,int v,int w){edge[tot]=Edge(v,w,head[u]);head[u]=tot++;}void spfa(){bool vis[N];memset(vis,0,sizeof(vis));dis[0]=0; vis[0]=1;queue<int> que;que.push(0);while(que.size()){int u=que.front(); que.pop(); vis[u]=0;for(int i=head[u];i!=-1;i=edge[i].pre){int v=edge[i].v,w=edge[i].w;if(dis[v]>dis[u]+w){dis[v]=dis[u]+w;if(!vis[v]){vis[v]=1;que.push(v);}}}}}bool cmp(int a,int b){return dis[a]<dis[b];}LL mult(LL a,LL b){LL tmp1=a%100000;LL tmp2=b%100000;return ((a/100000*tmp2+b/100000*tmp1)*100000+tmp1*tmp2)%mod;}int main(){while(scanf("%d%d%d",&n,&m,&q)!=EOF){tot=0;for(int i=0;i<n;i++){head[i]=-1;dp[0][i]=0,dp[1][i]=1;dis[i]=INF;ord[i]=i;}for(int i=0;i<m;i++){int u,v,w; scanf("%d%d%d",&u,&v,&w);addEdge(u,v,w); }spfa();sort(ord,ord+n,cmp);dp[0][0]=1;for(int i=0;i<n;i++){int u=ord[i];for(int j=head[u];j!=-1;j=edge[j].pre){int v=edge[j].v,w=edge[j].w;if(dis[v]==dis[u]+w) dp[0][v]=(dp[0][u]+dp[0][v])%mod;}}for(int i=n-1;i>=0;i--){int u=ord[i];for(int j=head[u];j!=-1;j=edge[j].pre){int v=edge[j].v,w=edge[j].w;if(dis[v]==dis[u]+w) dp[1][u]=(dp[1][u]+dp[1][v])%mod;}}for(int i=0;i<q;i++){int u; scanf("%d",&u);LL ans= dis[u]==INF?0LL:mult(dp[0][u],dp[1][u]);printf("%010lldn",ans);}}return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/369987.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号