P4542 ZJOI2011 營救皮卡丘

2022-05-19 11:02:11 字數 1288 閱讀 1626

傳送門

分析一下題目,發現每個點必須至少走過一次,並且對於乙個人的路徑,他摧毀的點編號一定是遞增的

並且在摧毀點 $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 那麼至少有乙個人...