在電視時代,沒有多少人**戲劇表演。malidinesia古董喜劇演員意識到這一事實,他們想宣傳劇院,尤其是古色古香的喜劇片。他們已經列印請帖和所有必要的資訊和計畫。許多學生被雇來分發這些請柬。每個學生志願者被指定乙個確切的公共汽車站,他或她將留在那裡一整天,邀請人們參與。
這裡的公交系統是非常特殊的:所有的線路都是單向的,連線兩個站點。公共汽車離開起始點,到達目的地之後又空車返回起始點。學生每天早上從總部出發,乘公交車到乙個預定的站點邀請乘客。每個站點都被安排了一名學生。在一天結束的時候,所有的學生都回到總部。現在需要知道的是,學生所需的公交費用的總和最小是多少。
輸入格式:
第1行有兩個整數n、m(1<=n,m<=1000000),n是站點的個數,m是線路的個數。
然後有m行,每行描述乙個線路,包括3個整數,起始點,目的地和**。
總部在第1個站點,價錢都是整數,且小於1000000000。
輸出格式:
輸出一行,表示最小費用。
輸入樣例#1:
4 61 2 10
2 1 60
1 3 20
3 4 10
2 4 5
4 1 50
輸出樣例#1:
210
【注意】
此題資料規模較大,需要使用較為高效的演算法,此題不設小規模資料分數。
思路:正反個建圖建一次,跑兩邊spfa,所得dis值相加即為答案。
錯因:多定義了三個long long陣列。
ac**:
#include#include#include
#include
#include
#define maxn 1000010
using
namespace
std;
intn,m,tot,tot1;
intvis[maxn],dis[maxn];
intto[maxn],cap[maxn],net[maxn],head[maxn];
intto1[maxn],cap1[maxn],net1[maxn],head1[maxn];
long
long
ans;
void add(int u,int v,long
long
w)void spfa(int
s) }
}
}}void spfa1(int
s) }
}
}}int
main()
spfa(1);
for(int i=1;i<=n;i++) ans+=dis[i];
spfa1(1);
for(int i=1;i<=n;i++) ans+=dis[i];
printf(
"%lld
",ans);
}
tle**:
#include#include#include
#include
#include
#define maxn 1000010
using
namespace
std;
intn,m,tot,tot1;
intvis[maxn];
intto[maxn],net[maxn],head[maxn];
intto1[maxn],net1[maxn],head1[maxn];
long
long
dis[maxn],cap1[maxn],cap[maxn],ans;
void add(int u,int v,long
long
w)void spfa(int
s) }
}
}}void spfa1(int
s) }
}
}}int
main()
spfa(1);
for(int i=1;i<=n;i++) ans+=dis[i];
spfa1(1);
for(int i=1;i<=n;i++) ans+=dis[i];
printf(
"%lld
",ans);
}
洛谷 P1342 請柬
這道題很適合作為p1629的加強版 因為這道題其實體現了反向建圖的高效性 反向建圖後 單終點最短路徑 單源最短路徑。因此兩邊dij,然後再累計和即可 部分不難弄。直接上 先說明以下程式,有1的變數名與第一次dij有關 學生出來 帶2的與第二次dij有關 學生回家 include include in...
洛谷P1342請柬
核心思想 兩遍最短路.1號點去各地的時間直接套最短路模板,各地到1號點時間用逆向思維,視為求1號點沿反邊到各地的時間即可.include include include include include define re register using namespace std const int ...
洛谷P1342 請柬解題報告
求去的路徑與回來的路徑和 1 n m 1000000 1 le n,m le 1000000 1 n,m 1000 000最短路 對於第一次碰到這種模型的oiers,這個地方可以講講的。顯然我們可以暴力跑n遍最短路。但是我們可以這麼想 我們出去是從乙個點到所有其他點,那麼我們能回來也從乙個點到所有其...