題目鏈結
題目大意:給出乙個無向圖,每條邊有長度和代價。求出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...