제출 #90032

#제출 시각아이디문제언어결과실행 시간메모리
90032Bodo171결혼 문제 (IZhO14_marriage)C++14
100 / 100
529 ms2672 KiB
#include <iostream> #include <fstream> #include <vector> #include <algorithm> #include <string> using namespace std; const int nmax=30005; const int mmax=100005; vector<int> v[nmax]; int l[nmax],r[nmax],L[nmax],R[nmax]; int ls[mmax]; bool viz[nmax]; bool changed; int n,m,i,j,k,a,b,p,cupl,ans,nr; bool cup(int x) { if(viz[x]) return 0; viz[x]=1; for(int it=L[x];it<=R[x]&&ls[it]<=i;it++) if(!r[ls[it]]) { l[x]=ls[it]; r[ls[it]]=x; return 1; } for(int it=L[x];it<=R[x]&&ls[it]<=i;it++) if(cup(r[ls[it]])) { l[x]=ls[it]; r[ls[it]]=x; return 1; } return 0; } void cc() { changed=1; while(changed&&cupl<m) { changed=0; for(j=1; j<=m; j++) if((!l[j])&&cup(j)) { cupl++; changed=1; } for(j=1;j<=m;j++) viz[j]=0; } } int ch,num; string s; int getnum() { num=0; while(s[ch]>='0'&&s[ch]<='9') { num=num*10+s[ch]-'0'; ch++; } ch++; return num; } int main() { //freopen("data.in","r",stdin); ios_base::sync_with_stdio(false); cin>>n>>m>>k; getline(cin,s); for(i=1;i<=k;i++) { getline(cin,s);ch=0; a=getnum();b=getnum(); v[b].push_back(a); } for(i=1;i<=m;i++) { L[i]=nr+1;sort(v[i].begin(),v[i].end()); for(j=0;j<v[i].size();j++) { ls[++nr]=v[i][j]; } R[i]=nr; } p=1; for(i=1;i<=n;i++) { if(i>=m)cc(); while(cupl==m) { for(j=1;j<=m;j++) while(L[j]<=R[j]&&ls[L[j]]<=p) L[j]++; if(r[p]) l[r[p]]=0,r[p]=0,cupl--; p++; cc(); } ans+=(p-1); } cout<<ans; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

marriage.cpp: In function 'int main()':
marriage.cpp:81:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(j=0;j<v[i].size();j++)
                 ~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...