1. 程式人生 > >【求一個點到各個點的來回花費和】POJ

【求一個點到各個點的來回花費和】POJ

Problem Description

輸入n,m,x代表n個城市,m條單向道路,求x點到各個點的回來花費和,中的最大和。接下來輸入m條道路,每行u,v,w分別代表城市u,到城市v,需要花費w。

思路:求x到各點的最小花費,在求各點到x的最小花費(需要把圖逆過來在求x到各點的最小花費(因為原本假設一點到x最小花費,你把圖逆過來後,就相當於求x到該點的最小花費)不理解可以在紙上畫一畫)。

#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#define INF 0x3f3f3f
using namespace std; struct node { int to, w; bool operator < (const node &b) const { if(w == b.w) return to < b.to; return w > b.w; } }; int n, x, dist[1005], ans, dist1[1005], vis[1005]; vector<node> a1[1005], a2[1005]; void dijkstra(int dis[], vector<node>
a[])//優先佇列優化 { memset(vis, 0, sizeof(vis));//初始化 for(int i = 1; i <= n; i++) dis[i] = INF; dis[x] = 0; vis[x] = 1; priority_queue<node> q;//最小邊,先出來 q.push((node){x, dis[x]});//點,到這點的最小花費 while(!q.empty()) { node u = q.top(); q.pop();//取出最小的邊,對應的點。 vis[u.to] = 1
; for(int i = 0; i < a[u.to].size(); i++) { node v = a[u.to][i]; if(dis[v.to] > dis[u.to] + v.w && !vis[v.to])//更新 { dis[v.to] = dis[u.to] + v.w; q.push((node){v.to, dis[v.to]}); } } } } int main() { int m, u, v, w; while(~scanf("%d %d %d", &n, &m, &x)) { while(m--) { scanf("%d %d %d", &u, &v, &w); a1[u].push_back((node){v, w});//正著 a2[v].push_back((node){u, w});//逆著 } dijkstra(dist, a1); dijkstra(dist1, a2); int ans = 0; for(int i = 1; i <= n; i++) { if(dist[i] != INF && dist1[i] != INF) { ans = max(ans, dist[i] +dist1[i]);//求最大 } } printf("%d\n", ans); } return 0; }

相關推薦

一個各個來回花費POJ

Problem Description 輸入n,m,x代表n個城市,m條單向道路,求x點到各個點的回來花費和,中的最大和。接下來輸入m條道路,每行u,v,w分別代表城市u,到城市v,需要花費w。 思路:求x到各點的最小花費,在求各點到x的最小花費(需

lightoj 12891到n的lcm取模

文章目錄 題目連結: 手寫點陣圖: 用bitset 題目連結: https://vjudge.net/contest/269935#problem 直接求lcm途中的答案會很大,而且不能直接取模 以前就只知道兩個數的lcm怎麼求,但

迴文樹 && 本質不同迴文串的ACM-ICPC 2018 南京賽區網路預賽 I. Skr

Step1 Problem: 給你一個字串 s,求本質不同的迴文字串的加和 mod 1e9+7。 例:s = “1111”, ans = 1111 + 111 + 11 + 1. 資料範圍: 1 <= len <= 2e6.

程式設計實現一個整數的二進位制中01的個數

宣告:假定該數是在32位平臺的機器上執行,在更高或最低平臺上的原理相同。 核心最優演算法: 求1的個數:num&=(num+1) 求0的個數:num |=(num+1) 問題分析: 因

實數域上的二分,二分答案POJ 2018 Best Cow Fences

連結 大意 給定一些序列,求出長度至少為mm的子序列的平均值最大 思路 因為奶牛的數量不可能為負數,所以該資料具有單調性,考慮二分 程式碼 #include<cst

最多能夠承受的最大重量poj 1797 Heavy Transportation

Problem Description 輸入T組測試資料,每組測試資料,輸入n,m分別代表n個城市,m條道路接下來m行,每行u,v,w分別代表u,v兩城市之間道路承受的重量。 思路:讓你求出從城市1到城市n最多能夠運輸最大重量,最短路的演算法,改變下

漢密爾頓、DP|狀態壓縮POJ-2288 Islands and Bridges

Islands and Bridges Time Limit: 4000MS Memory Limit: 65536K Description Given a map of islands and bridges that connect these island

貪心糖果傳遞(數軸上一個,使得n到其距離之和最小,該為n中位數)

問題 K: 【貪心】糖果傳遞 時間限制: 1 Sec  記憶體限制: 128 MB 提交: 2  解決: 2 [提交] [狀態] [討論版] [命題人:admin] 題目描述 有n個小朋友坐成一圈,每人有ai個糖果。每人只能給左右兩人傳遞糖果。每人每次傳遞一個糖果代

鄰接表+bfs一個到所有點的最短路

ios span return namespace mes scanf www bsp tor 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring>

ZYH的斐波那契數列線段樹動態開+矩陣快速冪斐波那契

描述 ZYH最近研究數列研究得入迷啦! 現在有一個斐波拉契數列(f[1]=f[2]=1,對於n>2有f[n]=f[n-1]+f[n-2]), 但是斐波拉契數列太簡單啦,於是ZYH把它改成了斐波拉契的字首和的數列{Si}(S[1]=1,對於n>1,有S[n]=S[n-1]+f[

一個矩陣中的馬鞍(c語言實現)

資料結構中的求一個矩陣的馬鞍點 請編寫一個完整的程式,如果矩陣A中存在這樣的一個元素A[i,j]滿足條件A[i,j]是第i行的值最小的元素,且又是第j列中最大的元素,則稱之為該矩陣的一個馬鞍點。 程式碼如下: #include<stdio.h> #d

python一個時間的前一個一個

python如何獲取一個時間點的前一個月和後一個月,網上雖然有很多教程,但是本人感覺太雜了而且不太好用,研究一番之後決定提供一種方法和思路。 #!/usr/bin/env python # -*- c

PAT_B_1032 挖掘機技術哪家強 (20 分)最後一個測試超時

為了用事實說明挖掘機技術到底哪家強,PAT 組織了一場挖掘機技能大賽。現請你根據比賽結果統計出技術最強的那個學校。 輸入格式: 輸入在第 1 行給出不超過 10​5​​ 的正整數 N,即參賽人數。隨後 N 行,每行給出一位參賽者的資訊和成績,包括其所代表的學校的編號(從 1 開始連續編號)、

在圓內隨機一個座標點/已知圓心角度

數學學的不好,記下來備查 已知圓心x1,y1,角度a,距離l,求x2,y2 x2=x1+l*cos(a) y2=y1+l*sin(a) 已知圓心x1,y1,以及點x2,y2,求點x2,y2相對於圓心所

一個矩陣的鞍,即在行上最小在列

#include<stdio.h>void readmtr(int a[][10],int n){int i,j;printf("input n*N matric:\n");for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("

一個到另外兩個所在直線的投影

//獲取一個點到另外兩個點所在直線的投影。 如果點在直線上,返回其本身 //下面公式適用於二維空間的點, Y軸的數值不考慮public static Vector3 GetProjectToLine(Vector3 _Point, Vector3 L0Point, Vect

給你一個 n 個,m 條邊的無向圖,至少要在這個的基礎上加多少條無向邊使得任意兩個可達~

給你一個 n 個點,m 條邊的無向圖,求至少要在這個的基礎上加多少條無向邊使得任意兩個點可達~  輸入描述: 第一行兩個正整數 n 和 m 。 接下來的m行中,每行兩個正整數 i 、 j ,表示點i與點j之間有一條無向道路。 輸出描述: 輸出一個整數,表示答案 示例1 輸入 4 2 1 2 3

一個手機端上傳圖片後可選放大檢視的外掛

對移動端上傳這塊不是特別瞭解 因為大部分上傳圖片點選放大擷取什麼的好像都是IOS或安卓開發的源生控制元件 現在要求用html來解決這種上傳圖片之後顯示小縮圖 然後點選縮圖放大到全屏 還可以手指再放大的那種效果 對整個移

jquery擊li標簽之後在該li標簽上添加一個class,擊下一個li時刪除上一個li的class

style 下一個 div mov 元素 使用 font rem pre 思路:點擊當前li元素後是用removeClass()刪除所有兄弟元素(使用siblings()獲取)的class樣式,然後使用addClass()為當前li添加class 具體演示如下: 1、HTM