제출 #1361549

#제출 시각아이디문제언어결과실행 시간메모리
1361549kokoxuya항공 노선도 (JOI18_airline)C++20
67 / 100
120 ms26436 KiB
#include "Alicelib.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define lsb(x) (x&(-x))
#define pii pair<int,int>
#define ss second
#define ff first
#define piii pair<int,pii>
#define debu(x) (cerr << #x  << " = "<< x << "\n")
#define debu2(x,y) (cerr << #x  << " = "<< x << " " << #y << " = " << y << "\n")
#define debu3(x,y,z) (cerr << #x  << " = "<< x << " " << #y << " = " << y << " " << #z << " = " << z<< "\n")
#define bitout(x,y) {\
	cerr << #x << " : ";\
	for (int justforbits = y; justforbits >=0; justforbits--)cout << (((1 << justforbits) & x)>=1);\
	cout << "\n";\
}
#define rangeout(j,rangestart,rangeend) {\
	cerr << "outputting " << #j<< ":\n";\
	for (int forrang = rangestart; forrang <= rangeend; forrang++)cerr << j[forrang] << " ";\
	cerr<<"\n";\
}
#define c1 {cerr << "Checkpoint 1! \n\n";cerr.flush();}
#define c2 {cerr << "Checkpoint 2! \n\n";cerr.flush();}
#define c3 {cerr << "Checkpoint 3! \n\n";cerr.flush();}
#define c4 {cerr << "Checkpoint 4! \n\n";cerr.flush();}
#define vi vector<int>
#define vpii vector<pii>
#define fr(i,x,y) for(int i=x;i<=y;i++)

void Alice( int N, int M, int A[], int B[] )
{
	//edge case n=1,2,3,4?
	//c1 to all the n nodes + 2 extra 
	//all not connected to c1 is for degrees
	//=> d1 : my logs => 0,1,2,...lgn-1
	//=> in d1: connected to lgn-1 + 1/2n => is ok for larger numbers
	//ok for when ur lg < 1/2 of u (ur>=4)
	
	//0,1,2
	//c1;
	vector<pii>tbp;
	int x=1,lgn=1;
	while(x*2<=N)
	{
		x*=2;lgn++;
	}
	//c1;
	//debu(lgn);
	
	int ca=lgn;
	for(int i=1;i<lgn;i++)
	{
		for(int ii=lgn;ii<=ca;ii++)
		{
			tbp.pb(mp(i,ii));
		}
		ca++;
	}
	
	//debu(ca);
	for(int i=0;i<N;i++)
	{
		for(int ii=0;ii<lgn;ii++)
		{
			if((1<<ii)&i){tbp.pb(mp(ii,i+ca));}
		}
	}
	//debu(ca);
	
	for(int i=0;i<M;i++){tbp.pb(mp(A[i]+ca,B[i]+ca));}
	//debu(tbp.size());
	
	//for(pii xx:tbp){debu2(xx.ff,xx.ss);}
	
	int mi=ca+N;
	for(int i=ca;i<ca+N;i++)
	{
		tbp.pb(mp(ca+N,i));
	}
	ca+=(N+1);

	vector<int>amt(ca,0);
	for(pii xx:tbp)
	{
		amt[xx.ff]++;
		amt[xx.ss]++;
	}
	int bi=0;
	fr(i,0,ca-1){bi=max(bi,amt[i]);}
	
	int curr=N;
	while(curr<=bi){curr++;tbp.pb(mp(ca,mi));ca++;}
	//c1;
	InitG(ca,tbp.size());
	int t1=0;
	for(pii xx:tbp){MakeG(t1,xx.ff,xx.ss);t1++;}
	//for(pii xx:tbp){debu2(xx.ff,xx.ss);}
	//c2;
}

#include "Boblib.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define lsb(x) (x&(-x))
#define pii pair<int,int>
#define ss second
#define ff first
#define piii pair<int,pii>
#define debu(x) (cerr << #x  << " = "<< x << "\n")
#define debu2(x,y) (cerr << #x  << " = "<< x << " " << #y << " = " << y << "\n")
#define debu3(x,y,z) (cerr << #x  << " = "<< x << " " << #y << " = " << y << " " << #z << " = " << z<< "\n")
#define bitout(x,y) {\
	cerr << #x << " : ";\
	for (int justforbits = y; justforbits >=0; justforbits--)cout << (((1 << justforbits) & x)>=1);\
	cout << "\n";\
}
#define rangeout(j,rangestart,rangeend) {\
	cerr << "outputting " << #j<< ":\n";\
	for (int forrang = rangestart; forrang <= rangeend; forrang++)cerr << j[forrang] << " ";\
	cerr<<"\n";\
}
#define c1 {cerr << "Checkpoint 1! \n\n";cerr.flush();}
#define c2 {cerr << "Checkpoint 2! \n\n";cerr.flush();}
#define c3 {cerr << "Checkpoint 3! \n\n";cerr.flush();}
#define c4 {cerr << "Checkpoint 4! \n\n";cerr.flush();}
#define vi vector<int>
#define vpii vector<pii>
#define fr(i,x,y) for(int i=x;i<=y;i++)

void Bob(int V, int U, int C[], int D[])
{
	//c1;
	//for(int i=0;i<U;i++){debu2(C[i],D[i]);}
	int mi,t1=0;
	vector<vi>aj(V);
	for(int i=0;i<U;i++)
	{
		aj[C[i]].pb(D[i]);
		aj[D[i]].pb(C[i]);
	}
	
	for(int i=0;i<V;i++)
	{
		if(aj[i].size()>t1){t1=aj[i].size();mi=i;}
	}
	//debu(mi);
	
	vector<bool>partof(V,false);
	for(int to:aj[mi])partof[to]=true;
	
	vector<int>mycorr(V,0);
	for(int i=0;i<V;i++)
	{
		if(partof[i]||i==mi)continue;
		t1=0;
		for(int x:aj[i]){if(!partof[x])t1++;}

		for(int x:aj[i])
		{
			if(partof[x]){mycorr[x]+=(1ll<<t1);}
		}
	}
	//rangeout(mycorr,0,V);
	
	vector<pii>tbp;
	for(int i=0;i<V;i++)
	{
		if(!partof[i])continue;
		//debu(i);
		
		for(int to:aj[i])
		{
			if(partof[to]&&to<i){tbp.pb(mp(mycorr[i],mycorr[to]));}
			//debu2(mycorr[i],mycorr[to]);}
		}
	}
	
	int amt=0;
	for(int x:mycorr){
		amt=max(amt,x);
	}
	
	//debu(tbp.size());
	InitMap(amt+1,tbp.size());
	for(pii xx:tbp){MakeMap(xx.ff,xx.ss);}
	//c2;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…