Submission #151541

#TimeUsernameProblemLanguageResultExecution timeMemory
151541Ruxandra985Teoretičar (COCI18_teoreticar)C++14
91 / 130
12085 ms108068 KiB
#include <cstdio> #include <vector> #include <algorithm> #include <cstring> #include <bitset> using namespace std; vector <pair <int,int> > v[400010],w[400010]; vector <pair <pair <int,int>,int> > mc; int sol[500010]; int ciclu[800001]; int g[400010]; int q[800010]; int f[500010]; int m , st , dr; void reset_all(){ memset ( g , 0 , sizeof(g) ); memset (f,0,sizeof(f)); for (int i=1;i<=st+dr;i++){ v[i].clear(); w[i].clear(); } } void dfs (int nod,int pus,vector <pair <pair <int,int>,int> > other[2]){ int i,vecin,mch; for (i=0;i<v[nod].size();i++){ vecin = v[nod][i].first; mch = v[nod][i].second; //printf ("%d\n",mch) if (!f[mch]){ f[mch] = 1; g[nod]--; g[vecin]--; other[pus%2].push_back(make_pair(make_pair(nod,vecin),mch)); dfs (vecin,pus+1,other); return; } } } void pune (vector <pair <pair <int,int>,int> > mc , int &cul){ /// pt chestia cu 2^x , o sa imparti muchiile mereu in 2 int i,x,y,idx,gmax; /// verifici daca setul tau e independent reset_all(); gmax = 0; for (i=0;i<mc.size();i++){ x = mc[i].first.first; y = mc[i].first.second; //printf ("%d %d\n",x,y); idx = mc[i].second; v[x].push_back(make_pair(y,idx)); v[y].push_back(make_pair(x,idx)); g[y]++; g[x]++; gmax = max (gmax , g[x]); gmax = max (gmax , g[y]); } //printf ("\n\n"); if ( gmax < 2 ) { /// e independent , pui cul peste tot if (!mc.empty()) cul++; for (i=0;i<mc.size();i++){ idx = mc[i].second; sol[idx] = cul; } return; } vector <pair <pair <int,int>,int> > other[2]; /// vrei sa imparti muchiile in doua seturi astfel incat niciuna din primul set /// sa nu aiba aceeasi culoare cu una din al doilea set /// iei pur si simplu drumuri maximale si pui muchiile alternant,cum faceam /// si la euler /// trebuie sa am grija ca mereu sa pun ceva in ambele other uri for (i=1;i<=st+dr;i++){ if (g[i]%2) dfs(i,0,other); } for (i=1;i<=st+dr;i++){ while (g[i]){ dfs (i,0,other); } } pune(other[0],cul); pune(other[1],cul); } int main() { FILE *fin = stdin; FILE *fout = stdout; int i,x,y,cul=0; fscanf (fin,"%d%d%d",&st,&dr,&m); int mi = m; for (i=1;i<=m;i++){ fscanf (fin,"%d%d",&x,&y); y+=st; mc.push_back(make_pair(make_pair(x,y),i)); } cul = 0; pune(mc,cul); fprintf (fout,"%d\n",cul); for (i=1;i<=mi;i++) fprintf (fout,"%d\n",sol[i]); return 0; }

Compilation message (stderr)

teoreticar.cpp: In function 'void dfs(int, int, std::vector<std::pair<std::pair<int, int>, int> >*)':
teoreticar.cpp:25:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (i=0;i<v[nod].size();i++){
              ~^~~~~~~~~~~~~~
teoreticar.cpp: In function 'void pune(std::vector<std::pair<std::pair<int, int>, int> >, int&)':
teoreticar.cpp:46:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (i=0;i<mc.size();i++){
              ~^~~~~~~~~~
teoreticar.cpp:61:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (i=0;i<mc.size();i++){
                  ~^~~~~~~~~~
teoreticar.cpp: In function 'int main()':
teoreticar.cpp:93:12: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     fscanf (fin,"%d%d%d",&st,&dr,&m);
     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
teoreticar.cpp:96:16: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         fscanf (fin,"%d%d",&x,&y);
         ~~~~~~~^~~~~~~~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...