Submission #90399

#TimeUsernameProblemLanguageResultExecution timeMemory
90399mirbek01Marriage questions (IZhO14_marriage)C++17
60 / 100
1578 ms13916 KiB
# include <bits/stdc++.h> using namespace std; const int N = 1e5 + 2; int n, m, k, mt[N], used[N], ans, y; vector <int> g[N], vr, mr; bool dfs(int v){ if(used[v]) return 0; vr.push_back(v); used[v] = 1; for(int to : g[v]){ if(to < y) continue; if(mt[to] == -1 || dfs(mt[to])){ if(mt[to] == -1) mr.push_back(to); if(mt[v] == -1) mr.push_back(v); mt[to] = v; mt[v] = to; return true; } } return false; } bool check(){ for(int i = 0; i < (int)mr.size(); i ++) mt[ mr[i] ] = -1; mr.clear(); for(int i = n + 1; i <= n + m; i ++){ for(int j = 0; j < (int)vr.size(); j ++){ used[ vr[j] ] = 0; } vr.clear(); dfs(i); } for(int i = n + 1; i <= n + m; i ++){ if(mt[i] == -1) return false; } return true; } int main(){ scanf("%d %d %d", &n, &m, &k); for(int i = 1; i <= k; i ++){ int a, b; scanf("%d %d", &a, &b); g[a].push_back(b + n); } memset(mt, -1, sizeof(mt)); for(int i = 1; i <= n; i ++){ for(int j = 0; j < g[i].size(); j ++){ g[g[i][j]].push_back(i); } int lo = 1, hi = i, m = 0; while(lo <= hi){ int md = (lo + hi) >> 1; y = md; if(check()) lo = md + 1, m = md; else hi = md - 1; } ans += m; } printf("%d", ans); }

Compilation message (stderr)

marriage.cpp: In function 'int main()':
marriage.cpp:61:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for(int j = 0; j < g[i].size(); j ++){
                            ~~^~~~~~~~~~~~~
marriage.cpp:50:12: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
       scanf("%d %d %d", &n, &m, &k);
       ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
marriage.cpp:54:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d %d", &a, &b);
             ~~~~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...