제출 #90399

#제출 시각아이디문제언어결과실행 시간메모리
90399mirbek01결혼 문제 (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);
}

컴파일 시 표준 에러 (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...