(
description
皮卡丘被火箭隊用**的計謀搶走了!這三個壞傢伙還給小智留下了赤果果的挑釁!為了皮卡丘,也為了正義,小智和他的朋友們義不容辭的踏上了營救皮卡丘的道路。
火箭隊一共有n個據點,據點之間存在m條雙向道路。據點分別從1到n標號。小智一行k人從真新鎮出發,營救被困在n號據點的皮卡丘。為了方便起見,我們將真新鎮視為0號據點,一開始k個人都在0號點。
由於火箭隊的重重布防,要想摧毀k號據點,必須按照順序先摧毀1到k-1號據點,並且,如果k-1號據點沒有被摧毀,由於防禦的連鎖性,小智一行任何乙個人進入據點k,都會被發現,並產生嚴重後果。因此,在k-1號據點被摧毀之前,任何人是不能夠經過k號據點的。
為了簡化問題,我們忽略戰鬥環節,小智一行任何乙個人經過k號據點即認為k號據點被摧毀。被摧毀的據點依然是可以被經過的。
k個人是可以分頭行動的,只要有任何乙個人在k-1號據點被摧毀之後,經過k號據點,k號據點就被摧毀了。顯然的,只要n號據點被摧毀,皮卡丘就得救了。
野外的道路是不安全的,因此小智一行希望在摧毀n號據點救出皮卡丘的同時,使得k個人所經過的道路的長度總和最少。
請你幫助小智設計乙個最佳的營救方案吧!
input
第一行包含三個正整數n,m,k。表示一共有n+1個據點,分別從0到n編號,以及m條無向邊。一開始小智一行共k個人均位於0號點。
接下來m行,每行三個非負整數,第i行的整數為ai,bi,li。表示存在一條從ai號據點到bi號據點的長度為li的道路。
output
僅包含乙個整數s,為營救皮卡丘所需要經過的最小的道路總和。
sample input
3 4 2
0 1 1
1 2 1
2 3 100
0 3 1
sample output
3 【樣例說明】
小智和小霞一起前去營救皮卡丘。在最優方案中,小智先從真新鎮前往1號點,接著前往2號據點。當小智成功摧毀2號據點之後,小霞從真新鎮出發直接前往3號據點,救出皮卡丘。
hint
對於100%的資料滿足n ≤ 150, m ≤ 20 000, 1 ≤ k ≤ 10, li ≤ 10 000, 保證小智一行一定能夠救出皮卡丘。至於為什麼k ≤ 10,你可以認為最終在小智的號召下,小智,小霞,小剛,小建,小遙,小勝,小光,艾莉絲,天桐,還有去日本旅遊的黑貓警長,一同前去大戰火箭隊。
source
day2
首先這題 很神 再其次 跪膜icefox 大佬 秒題神速啊
首先這個問題我覺得蠻像poj2594的 類似最小權值的可重路線 但是現在我們這題給的是無向圖 並且 要求滿足乙個類似dag的東西 就是想要訪問k 那麼必須把1~k-1的都訪問完 那麼要保證我每個點第一次被訪問只被訪問一次 那麼就和poj2594一模一樣了 所以建圖方法也相同 其次 我還可以預處理一下 某個點 從所有比他小的點轉移過來需要的最小代價是多少 我是跑了n遍dijkstra求出來的這樣的話 我就可以get我如果前面的點都訪問過了 我到達我想要的那個點的最小代價是多少啊然後 加邊的時候我是s->0 權值為k 費用為0 s->每個節點權值為1 費用為0 每個節點的另乙個匹配點到t的權值為1 費用為0 然後每個點都向序號比他大的點去連邊 比如權值為1 然後費用為i->j的最小路經長度 然後跑最小費用最大流即可
#include
#include
#include
#include
#include
#define pa pair
#define n 330
#define inf 0x3f3f3f3f
using
namespace
std;
inline
char gc()
return *s++;
}inline
int read()
int num=0,h[n],f[n],flag[n],pre[n],path[n],s,t,n,mp[n][n],m,k;
struct nodedata[n*n<<2],ed[n*n<<2];
inline
void insert2(int x,int y,int z)
inline
void insert1(int x,int y,int z,int c)
inline
void dijkstra(int s)
inline
bool spfa()
}}if (pre[t]==-1) return
0;else
return1;}
int main()
// for (int i=1;i<=num;++i) printf("%d %d %d\n",ed[i].x,ed[i].y,ed[i].z);
for (int i=1;i<=n;++i) dijkstra(i);num=1;memset(h,0,sizeof(h));insert1(s,0,k,0);
for (int i=1;i<=n;++i) insert1(s,i,1,0),insert1(i+n,t,1,0);
for (int i=0;i<=n;++i)
for (int j=i+1;j<=n;++j) if (i!=j&&mp[i][j]!=inf) insert1(i,j+n,1,mp[i][j]);
int ans=0;
while(spfa())
}printf("%d",ans);
return
0;}
2324 ZJOI2011 營救皮卡丘
題目鏈結 題目大意 n 1個城市 0到n 初始時k個人都在0城市。城市之間有距離。要求 1 遍歷完n個城市 有乙個人遍歷了某個城市就算這個城市被遍歷了 2 遍歷i城市前必須遍歷完前i 1個城 市,並且在遍歷前i 1個城市時不能經過大於等於i的城市。在滿足 1 2 的前提下使得k個人走的總距離最小 題...
BZOJ 2324 營救皮卡丘
思路 最小費用最大流 考慮設陣列d k i j 代表只用前k個城市,i到j的最短路 然後可以這樣建圖 s 0 流量為k,費用為0 i i n 流量為inf,費用為0 i n t 流量為1 i n j 流量為inf,費用為d j i j s i 流量為1,費用為0 代表如果乙個人到了i城市,它可以繼續...
bzoj 2324 最小費用最大流
time limit 10 sec memory limit 256 mb submit 2137 solved 873 submit status discuss 皮卡丘被火箭隊用 的計謀搶走了!這三個壞傢伙還給小智留下了赤果果的挑釁!為了皮卡丘,也為了正義,小智和他的朋友們義不容辭的踏上了營救皮...