題解 JSOI2015 圈地

2022-05-07 22:12:09 字數 1098 閱讀 8795

發現一種地要麼歸 \(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 種顏色染色使得每行每列均被染色的方案數。然後再容斥一下保證每種顏色都用上...