嘟嘟嘟
這道題其實挺顯然的。
首先dijkstra跑出最短路圖,然後在最短路圖上求最小割。
正確性顯然。
需要注意的是,在新圖中新增最短路圖的邊的時候,一定是跑完dijkstra再加邊,如果邊跑dijkstra邊加邊,得到的是最短路樹,而不是圖。我因為這個wa了好幾發。
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11view codeusing
namespace
std;
12#define enter puts("")
13#define space putchar(' ')
14#define mem(a, x) memset(a, x, sizeof(a))
15#define rg register
16 typedef long
long
ll;17 typedef double
db;18
const
int inf = 0x3f3f3f3f;19
const db eps = 1e-8;20
const
int maxn = 505;21
const
int maxe = 1.3e5 + 5;22
inline ll read()
2327
while(isdigit(ch))
28if(last == '
-') ans = -ans;
29return
ans;30}
31 inline void
write(ll x)
3237
38int
n, m;
39struct
edge1
40e1[maxe << 1
];43
int head1[maxn], ecnt1 = -1;44
void addedge1(int x, int y, int t, int
c)45
;47 head1[x] =ecnt1;48}
4950
struct
edge2
51e2[maxe << 2
];54
int head2[maxn], ecnt2 = -1;55
void addedge2(int
from, int to, int
w)56
;58 head2[from] =ecnt2;
59 e2[++ecnt2] = (edge2);
60 head2[to] =ecnt2;61}
6263
#define pr pair64
#define mp make_pair
65bool
in[maxn];
66int
dis[maxn];
67void dijkstra(int
s)6884}
85}86}
8788
intdis2[maxn];
89bool
bfs()
90103
}104
}105
return
dis2[n];
106}
107int
cur[maxn];
108int dfs(int now, int
res)
109120
}121
return
flow;
122}
123124
intmincut()
125132
return
flow;
133}
134135
intmain()
136144 dijkstra(1
);145
for(int i = 1; i <= n; ++i)
146for(int j = head1[i]; j != -1; j =e1[j].nxt)
147if(dis[e1[j].to] == dis[i] +e1[j].t) addedge2(i, e1[j].to, e1[j].c);
148write(dis[n]), enter, write(mincut()), enter;
149return0;
150 }
AHOI2008 上學路線
題意 給定乙個無向圖,刪除某些邊有一定的代價,要求刪掉使得最短路徑減小,求最小代價。首先要spfa求出起點到各個點的最短距離。對於一條權值為w,起點為i,終點為j的邊,設dis k 為起點到k點的距離,若dis j dis i w,則將該邊加入另乙個圖里,邊的容量為刪除這條邊的代價,則從起點到終點的...
AHOI2008 聚會 倍增
bzoj description y島風景美麗宜人,氣候溫和,物產豐富。y島上有n個城市,有n 1條城市間的道路連線著它們。每一條道路都連線某兩個城市。幸運的是,小可可通過這些道路可以走遍y島的所有城市。神奇的是,乘車經過每條道路所需要的費用都是一樣的。小可可,小卡卡和小yy經常想聚會,每次聚會,他...
AHOI2008 緊急集合 LCA
題目大意 給一棵樹,求三點之間最短距離,並求最短距離所在的點。題解 求出兩兩之間的lca,觀察可以發現,有兩個lca是相同的,且這個點一定在所有lca中深度最淺。畫乙個圖可以發現,集合點就是另乙個lca,因為這個點是這三個點互相路徑連線起來的公共點。至於距離,找個例子可以發現距離是dep a dep...