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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【qduoj - 1121】小明的贪心题(Dijkstra最短路 + 最短路条数)

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【qduoj - 1121】小明的贪心题(Dijkstra最短路 + 最短路条数) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題干:

小明的貪心題

描述

?

小明來到青島上學已經一年了,他給青島這座城市畫了一張地圖。在這個地圖上有n個點,小明的起始點為1號點,終點為n號點,并且地圖上的所有邊都是單向的。小明知道從i號點到j號點的時間花費為w分鐘,那么問題來了,求從1號點到n號的最小時間花費是多少?這個最少花費的路徑有多少條?

輸入

?

輸入格式:輸入文件第一行為兩個空格隔開的數n,m,表示這張地圖里有多少個點及有多少邊的信息。下面m行,每行三個數I、J、w,表示從I點到J點有道路相連且花費為w.(注意,數據提供的邊信息可能會重復,不過保證I<>J,1<=I,J<=n)。1<=N<=2100,0<=m<=N*(N-1), 1<=w<=2100.

輸出

?

輸出格式:輸出文件包含兩個數,分別是最少花費和花費最少的路徑的總數.兩個不同的最短路方案要求:路徑長度相同(均為最短路長度)且至少有一條邊不重合。若城市N無法到達則只輸出一個(‘No answer’);

輸入樣例 1?

5 4 1 5 4 1 2 2 2 5 2 4 1 1

輸出樣例 1

4 2

輸入樣例 2?

100 1 1 2 1

輸出樣例 2

No answer

解題報告:

? ? ?這題比賽的時候坑的我好苦啊,一個小錯誤(不過也確實以前都沒注意這個小地方,大概還是做雙權值的題做少了),最后前十都沒進。。。這么簡單的一道最短路條數,就因為少了一個vis的if判斷,然后就GG思密達。不過還是有很多地方是值得注意的。比如這題需要去重邊。(直接鄰接矩陣去重邊就可以了,因為數據量2000也不算大)

AC代碼:

#include<bits/stdc++.h> #define ll long long using namespace std; const int INF = 0x3f3f3f3f; const ll INFINF = 0x3f3f3f3f3f3f3f3f; int n,m,top; int head[5000 +5]; ll dis[5005],ans[5005]; bool vis[5005]; ll maze[5005][5005]; struct Edge{int to,ne;ll w; } e[5000000 +5]; struct point {int pos;ll c;point(){}point(int pos,ll c):pos(pos),c(c){}bool operator <(const point & b) const {return c>b.c;} }; void add(int u,int v,ll w) {e[++top].to = v;e[top].w=w;e[top].ne = head[u];head[u] = top; } void Dijkstra(int u,int v) {priority_queue<point> pq; for(int i = 1; i<=n; i++) dis[i] = INFINF;memset(vis,0,sizeof vis);memset(ans,0,sizeof ans);ans[u]=1;dis[u] = 0;point cur = point(u,0);pq.push(cur);while(!pq.empty()) {point now = pq.top();pq.pop(); // if(vis[now.pos] == 1) continue;vis[now.pos] = 1;for(int i = head[now.pos]; i!=-1; i=e[i].ne) {if(vis[e[i].to] == 1) continue;if( dis[e[i].to] > dis[now.pos] + e[i].w ) {dis[e[i].to] = dis[now.pos] + e[i].w;ans[e[i].to] = ans[now.pos];pq.push(point(e[i].to,dis[e[i].to] ) ); }else if(dis[e[i].to] == dis[now.pos] + e[i].w) {ans[e[i].to] += ans[now.pos];}} }if(dis[v] == INFINF) puts("No answer");else {printf("%lld %lld\n",dis[v],ans[v]);} } int main() {int a,b;ll w;while(~scanf("%d%d",&n,&m)) {top=0;memset(head,-1,sizeof head); // memset(maze,INF,sizeof maze);for(int i = 1; i<=n; i++) {for(int j = 1; j<=n; j++) {maze[i][j] = INFINF;}}for(int i = 1; i<=m; i++) {scanf("%d %d %lld",&a,&b,&w);if(maze[a][b]>w) maze[a][b]=w;}for(int i = 1; i<=n; i++) {for(int j = 1; j<=n; j++) {if(maze[i][j]<10000) {add(i,j,maze[i][j]);}}}Dijkstra(1,n); }return 0 ; } //5 4 //1 5 4 //1 2 2 //2 5 2 //4 1 1

AC代碼2:

#include<bits/stdc++.h> #define ll long long using namespace std; const int INF = 0x3f3f3f3f; const ll INFINF = 0x3f3f3f3f3f3f3f3f; int n,m,top; int head[5000 +5]; ll dis[5005],ans[5005]; bool vis[5005]; ll maze[5005][5005]; struct Edge{int to,ne;ll w; } e[5000000 +5]; struct point {int pos;ll c;point(){}point(int pos,ll c):pos(pos),c(c){}bool operator <(const point & b) const {return c>b.c;} }; void add(int u,int v,ll w) {e[++top].to = v;e[top].w=w;e[top].ne = head[u];head[u] = top; } void Dijkstra(int u,int v) {priority_queue<point> pq; for(int i = 1; i<=n; i++) dis[i] = INFINF;memset(vis,0,sizeof vis);memset(ans,0,sizeof ans);ans[u]=1;dis[u] = 0;point cur = point(u,0);pq.push(cur);while(!pq.empty()) {point now = pq.top();pq.pop();if(vis[now.pos] == 1) continue;vis[now.pos] = 1;for(int i = head[now.pos]; i!=-1; i=e[i].ne) { // if(vis[e[i].to] == 1) continue;if( dis[e[i].to] > dis[now.pos] + e[i].w ) {dis[e[i].to] = dis[now.pos] + e[i].w;ans[e[i].to] = ans[now.pos];pq.push(point(e[i].to,dis[e[i].to] ) ); }else if(dis[e[i].to] == dis[now.pos] + e[i].w) {ans[e[i].to] += ans[now.pos];}} }if(dis[v] == INFINF) puts("No answer");else {printf("%lld %lld\n",dis[v],ans[v]);} } int main() {int a,b;ll w;while(~scanf("%d%d",&n,&m)) {top=0;memset(head,-1,sizeof head); // memset(maze,INF,sizeof maze);for(int i = 1; i<=n; i++) {for(int j = 1; j<=n; j++) {maze[i][j] = INFINF;}}for(int i = 1; i<=m; i++) {scanf("%d %d %lld",&a,&b,&w);if(maze[a][b]>w) maze[a][b]=w;}for(int i = 1; i<=n; i++) {for(int j = 1; j<=n; j++) {if(maze[i][j]<10000) {add(i,j,maze[i][j]);}}}Dijkstra(1,n); }return 0 ; } //5 4 //1 5 4 //1 2 2 //2 5 2 //4 1 1

總結:

? ?所以保險起見,還是兩個if剪枝都寫上吧。

總結

以上是生活随笔為你收集整理的【qduoj - 1121】小明的贪心题(Dijkstra最短路 + 最短路条数)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 激情五月婷婷综合 | 天天夜夜久久 | 中文亚洲av片在线观看 | 亚洲综合精品国产一区二区三区 | 天天做天天爱天天爽综合网 | 国产又猛又粗 | 91超碰在 | av黄色免费 | 男女日批视频 | 麻豆传媒mv | 日本中文字幕二区 | 波多野结衣激情视频 | av在线专区| 久久精品视频8 | 中文字幕一区久久 | 一级黄色免费 | 天天弄天天操 | 特种兵之深入敌后 | 丝袜在线一区 | www.欧美色 | 亚洲一区二区电影 | 欧美一级二级片 | 91精品国产综合久久久蜜臀 | av午夜精品 | 国产三级视频 | 日韩欧洲亚洲 | 日韩免费观看 | 色哟哟国产精品色哟哟 | 欧美女优视频 | 日本亚洲欧洲色 | www.婷婷色| 午夜视频精品 | 亚洲AV无码成人片在线观看 | 国产精品免费一区二区三区四区 | 国产探花一区二区 | 荒岛淫众女h文小说 | 懂色av一区二区三区四区五区 | 解开人妻的裙子猛烈进入 | 韩国美女一区二区 | 另类尿喷潮videofree | 中国a级黄色片 | 在线免费观看av网 | 波多野结衣免费观看视频 | 99精品网站| 精品动漫一区二区三区在线观看 | 国产精品天美传媒入口 | 性生交大片免费看女人按摩 | 国产在线播放一区二区三区 | 琪琪伦伦影院理论片 | 五月婷婷视频在线观看 | 激情另类小说 | 亚洲国产av一区二区 | 少妇搡bbbb搡bbbb | 免费在线播放 | 精品黑人一区二区三区久久 | 日韩欧美视频一区二区三区 | 亚洲成人av电影在线 | 欧美性生活视频 | 在线观看中文字幕第一页 | 国产精品久久久久9999 | 色哟哟网站 | 国产黄a三级三级三级 | caopeng在线 | 中文字幕在线观看视频一区二区 | 精品人妻一区二 | 亚洲国产高清视频 | 日本在线视频一区 | 日韩三级视频在线播放 | 免费黄网站在线观看 | 久久久蜜桃一区二区人 | 成人黄色一区二区 | 亚洲精品一二区 | 蜜臀久久精品久久久久久酒店 | 久久靠逼视频 | 樱花草涩涩www在线播放 | 欧美激情一区二区视频 | 色综合久久久久 | 欧美精品一区二区蜜桃 | 日韩av在线看 | 精品久久网 | 澳门一级黄色片 | 精品国产区| 一级免费观看视频 | 国产伦理久久精品久久久久 | 欧美 日韩 国产一区 | youjizz亚洲女人| 麻豆久久久9性大片 | 姐姐av| 成人av在线网 | 99热综合 | 四季av中文字幕 | 久久久社区 | 欧美成人精品一区二区免费看片 | 90岁肥老奶奶毛毛外套 | www日韩 | 久久久精品人妻一区二区三区 | 美女高潮黄又色高清视频免费 | 国产超碰在线观看 | 国产吞精囗交久久久 |