Submission #1168940

#TimeUsernameProblemLanguageResultExecution timeMemory
1168940anmattroiFriend (IOI14_friend)C++17
0 / 100
1 ms328 KiB
#include "friend.h" #include <bits/stdc++.h> #define maxn 100005 using namespace std; vector<int> adj[1005], g[1005]; int cl[1005], x[1005], y[1005], d[1005]; int N; void pfs(int u) { for (int v : adj[u]) if (cl[v] == -1) { cl[v] = 1-cl[u]; pfs(v); } } int bfs() { queue<int> q; for (int u = 1; u <= N; u++) if (x[u] == 0) { q.push(u); d[u] = 0; } else d[u] = INT_MAX; d[0] = INT_MAX; while (!q.empty()) { int u = q.front(); q.pop(); for (int v : g[u]) if (d[y[v]] == INT_MAX) { d[y[v]] = d[u] + 1; if (y[v]) q.push(y[v]); } } return d[0] != INT_MAX; } int dfs(int u) { if (u == 0) return 1; for (int v : adj[u]) if (d[y[v]] == d[u] + 1) if (dfs(y[v])) { x[u] = v; y[v] = u; d[u] = INT_MAX; return 1; } d[u] = INT_MAX; return 0; } int maxmatch() { int ans = 0; while (bfs()) { for (int u = 1; u <= N; u++) if (x[u] == 0) if (dfs(u)) ++ans; } return ans; } int findSample(int n, int confidence[], int host[], int protocol[]){ N = n; for (int i = 0; i < n; i++) { adj[i].clear(); g[i].clear(); cl[i] = -1; x[i] = y[i] = 0; } for (int i = 1; i < n; i++) if (protocol[i] == 1) { for (int v : adj[host[i]]) { adj[v].emplace_back(i); adj[i].emplace_back(v); } } else { adj[host[i]].emplace_back(i); adj[i].emplace_back(host[i]); } for (int i = 0; i < n; i++) if (cl[i] == -1) { cl[i] = 0; pfs(i); } for (int i = 0; i < n; i++) if (cl[i] == 0) for (int j : adj[i]) g[i].emplace_back(j); return n-maxmatch(); } /* 6 1 1 1 1 1 1 0 0 0 1 1 0 2 1 0 0 */ //4
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...