結果
問題 | No.2236 Lights Out On Simple Graph |
ユーザー |
![]() |
提出日時 | 2023-03-09 20:31:30 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,442 bytes |
コンパイル時間 | 4,207 ms |
コンパイル使用メモリ | 272,608 KB |
最終ジャッジ日時 | 2025-02-11 07:14:26 |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 48 WA * 9 |
ソースコード
#include <bits/stdc++.h>#include <atcoder/all>using namespace std;using namespace atcoder;using ll = long long;using mint = modint998244353;#define rep(i, n) for (int i = 0; i < (int)(n); i++)#define repf(i, n, flag) for (int i = 0; i < (int)(n) && flag; i++)#define all(v) v.begin(), v.end()const int INF = 1e9;int main() {int n, m;cin >> n >> m;dsu d(n);vector dp(n, vector<int>(n, INF));rep(i, m) {int a, b;cin >> a >> b;a--; b--;dp[a][b] = dp[b][a] = 1;d.merge(a, b);}int cnt = 0;vector<int> c(n);rep(i, n) {cin >> c[i];if(c[i] == 1) cnt++;}auto grps = d.groups();for(auto vec: grps) {int tmp = 0;for(int x: vec) if(c[x] == 1) tmp++;if(tmp % 2 != 0) {cout << -1 << endl;return 0;}}rep(k, n) rep(i, n) rep(j, n) dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j]);mcf_graph<int, int> g(2*n+2);int s = 2*n, t = s + 1;rep(i, n) g.add_edge(s, i, 1, 0);rep(i, n) g.add_edge(n+i, t, 1, 0);rep(i, n) rep(j, n) {if(i == j) continue;if(c[i] == 0) continue;if(c[j] == 0) continue;if(dp[i][j] >= INF) continue;g.add_edge(i, n+j, 1, dp[i][j]);}auto res = g.flow(s, t);if(res.first < cnt) cout << -1 << endl;else cout << res.second / 2 << endl;}