傳送門
分析一下題目,發現每個點必須至少走過一次,並且對於乙個人的路徑,他摧毀的點編號一定是遞增的
並且在摧毀點 $i$ 之前,他不能經過 $i+1$ 到 $n$ 的點,考慮設 $dis[i][j],i
因為最終每個點都會被摧毀,那麼乙個人的總路程就是 $dis[0][p_1]\sum_^dis[p_][p_i]$ ($p_i$ 表示這個人摧毀的第 $i$ 個點),發現這其實就是最小覆蓋問題
所以直接套上去就好了,**中把點的編號都 $+1$ 了,注意 $long\ long$
#include#include#include
#include
#include
#include
using
namespace
std;
typedef
long
long
ll;inline
intread()
while(ch>='
0'&&ch<='
9')
return x*f;
}const
int n=1e5+7,m=1e7+7,inf=1e9+7
;int fir[n],from[m],to[m],val[m],cst[m],cntt=1
;inline
void add(int a,int b,int c,int
d)int
dis[n],mif[n],pre[n],s,t;
queue
q;bool
inq[n];
bool
spfa()
}return dis[t]}ll ans;
void
upd()
int n,m,k,d[307][307
];int
main()
inta,b,c;
for(int i=1;i<=m;i++)
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(kd[k][j]);
add(s,
1,k,0
);
for(int i=2;i<=n;i++)
while
(spfa()) upd();
printf(
"%lld
",ans);
return0;
}
P4542 ZJOI2011 營救皮卡丘
營救皮卡丘 求用 k 條從 0 號節點出發的路徑覆蓋整個圖的最小距離和。其中只有在 1 sim i 1 號節點全部被遍歷之後才能走到 i 號節點。其實第二個限制條件不用太管它,因為只要找到了 k 條路徑,大家先後按某種順序走總能滿足要求。不過這個條件也不是沒有用,它給 floyd 傳遞閉包限制了條件...
bzoj2324 ZJOI2011 營救皮卡丘
description 皮卡丘被火箭隊用 的計謀搶走了!這三個壞傢伙還給小智留下了赤果果的挑釁!為了皮卡丘,也為了正義,小智和他的朋友們義不容辭的踏上了營救皮卡丘的道路。火箭隊一共有n個據點,據點之間存在m條雙向道路。據點分別從1到n標號。小智一行k人從真新鎮出發,營救被困在n號據點的皮卡丘。為了方...
ZJOI2011 營救皮卡丘
題面 神仙題。做最小路徑覆蓋。有乙個很像的地方,就是最小路徑覆蓋必須覆蓋到每個點,這道題也一樣。這道題有4個和最小路徑覆蓋不一樣的地方 可以重複訪問 這個可以用 floyed 傳遞閉包解決 每條路徑必須從原點出發 每個點必須被 到達 並不能乙個節點成乙個路徑 假設已經訪問了 1.x 那麼至少有乙個人...