1266 AHOI2006 上學路線route

2021-07-27 16:56:24 字數 924 閱讀 6090

題目鏈結

題目大意:給出乙個無向圖,每條邊有長度和代價。求出1到n的最短路。刪掉一些邊使得1到n的最短路變大並使得刪掉邊的代價之和最小。

題解:跑出最短路樹,然後求最短路樹上的最小割

我的收穫:按照3931改了幾行就過了……

#include 

#include

#include

#include

#include

using namespace std;

const int m=2005;

const int mm=133333;

#define ll long long

#define inf llong_max/10000

int n,m,t,t2,st,ed;

int lim[m],head[m],last[m],num[m],d[m];

int head2[m],q[mm];

ll dis[m];

bool vis[m],exit;

struct nodep[mm*4];

struct edgee[mm*4];

void add2(int u,int v,ll w,ll co)

void add(int u,int v,ll w)

void insert(int u,int v,ll w)

ll dfs(int

x,ll in)

}if(--num[d[x]]==0) exit=1;

d[x]++,num[d[x]]++,last[x]=head[x];

return ans;

}void build()

void work()}}

}void init()

int main()

AHOI2008 上學路線

題意 給定乙個無向圖,刪除某些邊有一定的代價,要求刪掉使得最短路徑減小,求最小代價。首先要spfa求出起點到各個點的最短距離。對於一條權值為w,起點為i,終點為j的邊,設dis k 為起點到k點的距離,若dis j dis i w,則將該邊加入另乙個圖里,邊的容量為刪除這條邊的代價,則從起點到終點的...

AHOI2008 上學路線

嘟嘟嘟 這道題其實挺顯然的。首先dijkstra跑出最短路圖,然後在最短路圖上求最小割。正確性顯然。需要注意的是,在新圖中新增最短路圖的邊的時候,一定是跑完dijkstra再加邊,如果邊跑dijkstra邊加邊,得到的是最短路樹,而不是圖。我因為這個wa了好幾發。1 include2 include...

BZOJ 1266 上學路線route(最小割)

題意 給出乙個無向圖,每條邊有長度和代價。求出1到n的最短路。之後刪掉一些邊使得1到n的最短路變大?在此情況下使得刪掉邊的代價之和最小。思路 首先求出每個點到1和n的最短路。之後可以確定每條邊是否為關鍵邊 就是最短路上的邊 將關鍵邊建立網路流圖,求最小割即可。struct node node edg...