标签:复杂度 its dig and add vector pre 没有 rand
带花树,那是啥?
每次复杂度 \(O(nm)\) 随机5次似乎就卡不掉(起码现在uoj上没有能卡掉这个的
#include <bits/stdc++.h>
using namespace std;
int read() {
int x = 0, c = getchar();
while (!isdigit(c)) c = getchar();
while (isdigit(c)) x = x * 10 + c - '0', c = getchar();
return x;
}
#define pb push_back
#define lo1(i,a) for(int i = 1; i <= a; ++i)
vector<int>G[505];
int mat[505], Ans[505], ans, n = read(), m = read(), vis[503], idx;
bool dfs(int u) {
vis[u] = idx; random_shuffle(G[u].begin(), G[u].end());
for (auto v : G[u]) {
int v1 = mat[v];
if (vis[v1] == idx) continue;
mat[v1] = 0, mat[u] = v, mat[v] = u;
if (!v1 || dfs(v1)) return 1;
mat[v1] = v, mat[u] = 0, mat[v] = v1;
}
return 0;
}
inline void add(int u, int v) {G[u].pb(v), G[v].pb(u);}
int main() {
while (m--) add(read(), read());
lo1(K, 3) {
lo1(i, n) if (!mat[i]) ++idx, dfs(i);
int tmp = 0;
lo1(i, n) tmp += (mat[i] != 0);
if (tmp > ans) ans = tmp, copy(mat + 1, mat + 1 + n, Ans + 1);
}
cout << ans / 2 << '\n';
lo1(i, n) cout << Ans[i] << ' ';
return 0;
}
标签:复杂度 its dig and add vector pre 没有 rand
原文地址:https://www.cnblogs.com/storz/p/10472759.html