發現一種地要麼歸 \(a\) , 要麼歸 \(b\) , 若相鄰兩塊歸屬不同還有額外代價
那麼 \(a\) 買就連源點, \(b\) 買就連匯點
總收益加上這些值
中間連代價的雙向邊
答案為總收益減去最小割
#include #include #include #include #include #include const int n = 160005;
const int inf = 0x3f3f3f3f;
using namespace std;
int n, m, id[405][405], head[n], s, t, cnte = 1, d[n], cur[n], ans;
struct edge e[n << 4];
queueq;
template < typename t >
inline t read()
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * w;
}inline void adde(int u, int v, int w)
, head[u] = cnte;
e[++cnte] = (edge) , head[v] = cnte;
}bool bfs()
}return d[t];
}int dfs(int u, int a)
if(!a) break;
}if(a) d[u] = 0;
return f;
}int dinic()
int main()
for(int x, i = 1; i < n; i++)
for(int j = 1; j <= m; j++)
for(int x, i = 1; i <= n; i++)
for(int j = 1; j < m; j++)
ans -= dinic();
printf("%d\n", ans);
return 0;
}
題解 JSOI2015 地鐵線路
兩問分開考慮 對於第一問,每條線路建乙個點,線路上的站點向該點連一條 1 的邊,該點向線路上的點連一條 0 的邊 直接最短陸即可 對於第二問 假設代表某條線路的點 i 的 dis 為 d 那麼他所連線的站點要麼 dis 為 d 要麼 dis 為 d 由於這條線路是一條直的,只用取 dis 為 d 1...
JSOI2015 染色問題 題解
傳送門 容斥原理 把三個容斥套一起 我們列舉至少有i ii行沒有染色,至少j jj列沒有染色,至少k kk種顏色沒有用到,那麼剩下 n i m j n i m j n i m j 個格仔每個都有c 1 k c 1 k c 1 k種選擇 可以在剩下c k c kc k種顏色中挑一種,也可以不染色 因此...
題解 JSOI2015染色問題
好像這個容斥還是明顯的。一共有三個要求,可以用組合數先滿足乙個,再用容斥解決剩下的兩個維。反正這題資料範圍這麼小,隨便亂搞都可以 用 a k i 表示使用 k 種顏色,至少有 i 列沒有染色的方案數,可以容斥預處理得到使用 k 種顏色染色使得每行每列均被染色的方案數。然後再容斥一下保證每種顏色都用上...