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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Uva 10917

發(fā)布時間:2025/7/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Uva 10917 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目鏈接:http://vjudge.net/contest/143062#problem/A

題意:一個人要從點1去到點2,中間還有很多點和很多條邊。問你如果他每次走的邊(a,b)都滿足:a點到目標(biāo)點的最短距離<b點到目標(biāo)點的最短距離,那么他從點1出發(fā)到點2總共有多少條路徑。

分析:

從家出發(fā)使用dijkstra,題目的條件"存在一條從B出發(fā)回家的路徑,比所有從A出發(fā)的路徑都短",實際上就是 d[B] < d[A],這樣,就有:一條有向邊 A->B,建立新圖。從起點出發(fā)到終點有多少條路。DAG模型。

?

#include <bits/stdc++.h> using namespace std;const int maxn = 1000+ 10; const int INF = 0x3f3f3f3f;struct Edge {int from,to,dist; };struct HeapNode {int d,u;bool operator < (const HeapNode& rhs) const{return d > rhs.d;} };struct Dijkstra {int n,m;vector<Edge> edges;vector<int> G[maxn];bool done[maxn];int d[maxn];int p[maxn];void init(int n){this->n = n;for(int i=0; i<n; i++)G[i].clear();edges.clear();}void AddEdge(int from,int to,int dist){edges.push_back((Edge){from,to,dist});m = edges.size();G[from].push_back(m-1);}void dijkstra(int s){priority_queue<HeapNode> Q;for(int i=0; i<n; i++)d[i] = INF;d[s] = 0;memset(done,0,sizeof(done));Q.push((HeapNode){0,s});while(!Q.empty()){HeapNode x = Q.top();Q.pop();int u = x.u;if(done[u]) continue;for(int i=0; i<G[u].size(); i++){Edge& e = edges[G[u][i]];if(d[e.to]>d[u]+e.dist){d[e.to] = d[u] + e.dist;p[e.to] = G[u][i];Q.push((HeapNode){d[e.to],e.to});}}}} };Dijkstra solve; int d[maxn];int dp(int u) {if(u==1) return 1;int& ans = d[u];if(ans>=0) return ans;ans = 0;for(int i=0; i<solve.G[u].size(); i++){int v = solve.edges[solve.G[u][i]].to;if(solve.d[v]<solve.d[u]) ans +=dp(v);}return ans; }int main() {int n,m;while(scanf("%d",&n),n){scanf("%d",&m);solve.init(n);for(int i=0; i<m; i++){int u,v,d;scanf("%d%d%d",&u,&v,&d);u--;v--;solve.AddEdge(u,v,d);solve.AddEdge(v,u,d);}solve.dijkstra(1);memset(d,-1,sizeof(d));printf("%d\n",dp(0));}return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/TreeDream/p/6103887.html

總結(jié)

以上是生活随笔為你收集整理的Uva 10917的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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