This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define MAXN 100005
typedef long long ll;
using namespace std;
int l,r,m;
vector<pair<int,int> > niz[2*MAXN];
pair<int,int> grane[5*MAXN];
int boje[5*MAXN],stepen[2*MAXN];
vector<int> resip,tcvor,levi,desni;
int bboja=0,maxd;
bool aktivan[2*MAXN],obidjen[5*MAXN];
int pocs[2*MAXN];
void ojler(int t,int grana,int znak,int dub){
obidjen[grana]=true;
for(auto x:niz[t])
if(!obidjen[x.second])
ojler(x.first,x.second,1-znak,dub);
boje[grana]|=(znak<<dub);
if(znak)desni.pb(grana);
else levi.pb(grana);
}
void resi(int dub,vector<int> v){
if(dub>=maxd)return;
levi.clear();
desni.clear();
bboja=max(bboja,1<<dub);
for(auto x:v){
obidjen[x]=false;
int a=grane[x].F,b=grane[x].S;
if(!aktivan[a]){
aktivan[a]=true;
niz[a].clear();
tcvor.pb(a);
}
if(!aktivan[b]){
aktivan[b]=true;
niz[b].clear();
tcvor.pb(b);
}
niz[a].pb(mp(b,x));
niz[b].pb(mp(a,x));
}
niz[l+r+1].clear();
niz[0].clear();
for(auto x:tcvor){
if(niz[x].size()&1){
if(x<=l){
niz[x].pb(mp(l+r+1,0));
niz[l+r+1].pb(mp(x,0));
}else{
niz[x].pb(mp(0,0));
niz[0].pb(mp(x,0));
}
}
}
if(niz[0].size()&1){
niz[0].pb(mp(l+r+1,0));
niz[l+r+1].pb(mp(0,0));
}
for(auto x:tcvor){
if(obidjen[niz[x][0].S])continue;
ojler(niz[x][0].F,0,0,dub);
}
vector<int> r1,r2;
for(auto x:levi)
if(x!=0)r1.pb(x);
for(auto x:desni)
if(x!=0)r2.pb(x);
for(auto x:tcvor)aktivan[x]=false;
tcvor.clear();
resi(dub+1,r1);
resi(dub+1,r2);
}
int main()
{
scanf("%d %d %d", &l, &r, &m);
for(int i=1;i<=m;i++){
int t1,t2;
scanf("%d %d", &t1, &t2);
t2+=l;
pocs[t1]++;
pocs[t2]++;
bboja=max(bboja,max(pocs[t1],pocs[t2]));
grane[i]=(mp(t1,t2));
resip.pb(i);
}
int bbp=1;
while((1<<bbp)<bboja)bbp++;
maxd=bbp;
bboja=1<<bbp;
resi(0,resip);
printf("%d\n",bboja);
for(int i=1;i<=m;i++)printf("%d\n",boje[i]+1);
return 0;
}
Compilation message (stderr)
teoreticar.cpp: In function 'int main()':
teoreticar.cpp:95:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d %d", &l, &r, &m);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
teoreticar.cpp:100:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d", &t1, &t2);
~~~~~^~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |