Submission #872663


Source Code Expand

#include<vector>
#include<cmath>
#include<map>
#include<cstdlib>
#include<iostream>
#include<sstream>
#include<fstream>
#include<string>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<set>
#include<stack>
#include<bitset>
#include<functional>
#include<ctime>
#include<queue>
#include<deque>
#include<complex>
using namespace std;
#define pb push_back
#define pf push_front
typedef long long lint;
typedef complex<double> P;
#define mp make_pair
#define fi first
#define se second
typedef pair<int,int> pint;
#define All(s) s.begin(),s.end()
#define rAll(s) s.rbegin(),s.rend()
#define REP(i,a,b) for(int i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)
vector<int> gr[114514];
int pat[114514];
lint st[114514],go[114514],inp[114514];
bool sumi[114514];
int num[3];
int out=0,ng1=-1,ng2=-1;
vector<int> cycle;
int tmp[114514];
void dfs(int v,int p){
	if(pat[v]>=0) return;
	pat[v]=p;num[pat[v]]++;
	rep(i,gr[v].size()){
		int w=gr[v][i];
		if(v==ng1 && w==ng2) continue;
		if(v==ng2 && w==ng1) continue;
		dfs(w,1-p);
	}
}
void dfs2(int v,int u){
	rep(i,gr[v].size()){
		int w=gr[v][i];
		if(w==u) continue;
		if(v==ng1 && w==ng2) continue;
		if(v==ng2 && w==ng1) continue;
		dfs2(w,v);
		out+=abs(st[w]-go[w]);
		st[v]+=st[w];go[v]+=go[w];
	}
	if(pat[v]==1) st[v]++;else go[v]++;
}

lint cal(lint mi){
	memset(st,0,sizeof(st));
	memset(go,0,sizeof(go));
	st[ng1]=mi;go[ng2]=mi;out=0;
	dfs2(0,-1);
	return abs(mi)+out;
}

void dfscycle(int v,int u,int d){
	//cout<<v<<' '<<u<<' '<<d<<endl;
	if(sumi[v]){
		if(cycle.size()>0) return;
		int t=0;
		while(tmp[t]!=v && t<d) t++;
		//cout<<v<<' '<<t<<endl;
		REP(i,t,d) cycle.pb(tmp[i]);
		return;
	}
	tmp[d]=v;sumi[v]=true;
	rep(i,gr[v].size()){
		int w=gr[v][i];
		if(w==u) continue;
		dfscycle(w,v,d+1);
	}
	//sumi[v]=false;
	//tmp.pop_back();
}

int main()
{
	int n,m,a,b;
	scanf("%d %d",&n,&m);
	rep(i,m){
		scanf("%d %d",&a,&b);
		a--;b--;gr[a].pb(b);gr[b].pb(a);
	}
	if(n%2>0){
		cout<<-1<<endl;return 0;
	}
	memset(num,0,sizeof(num));
	memset(pat,-1,sizeof(pat));
	memset(st,0,sizeof(st));
	memset(go,0,sizeof(go));
	if(m==n-1){
		dfs(0,0);
		if(num[0]!=num[1]){
			cout<<-1<<endl;return 0;
		}
		dfs2(0,-1);
		cout<<out<<endl;
		return 0;
	}
	dfscycle(0,-1,0);
	ng1=cycle[0];ng2=cycle[1];
	//rep(i,cycle.size()) cout<<cycle[i]<<endl;
	if(cycle.size()%2==0){
		dfs(0,0);
		if(num[0]!=num[1]){
			cout<<-1<<endl;return 0;
		}
		int lo=-114514,hi=114514;lint out=1145141919810364364LL;
		while(hi>lo+5){
			lint m1=(lo+hi)/2,m2=m1+1,x1=cal(m1),x2=cal(m2);
			//cout<<m1<<' '<<x1<<' '<<m2<<' '<<x2<<endl;
			if(x1>x2) lo=m1;else hi=m2;
		}
		REP(i,lo,hi+1) out=min(out,cal(i));
		cout<<out<<endl;
		return 0;
	}
	dfs(ng1,0);pat[ng2]=0;
	if(num[0]>num[1]) st[ng1]=st[ng2]=(num[0]-num[1])/2;
	else go[ng1]=go[ng2]=(num[1]-num[0])/2;
	dfs2(0,-1);
	//cout<<num[0]<<' '<<num[1]<<endl;
	cout<<out+abs((num[0]-num[1])/2)<<endl;
}

Submission Info

Submission Time
Task F - Namori
User sky58
Language C++14 (GCC 5.4.1)
Score 2200
Code Size 3021 Byte
Status AC
Exec Time 579 ms
Memory 17276 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:95:22: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d",&n,&m);
                      ^
./Main.cpp:97:23: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d",&a,&b);
                       ^

Judge Result

Set Name Sample Subtask1 All
Score / Max Score 0 / 0 1500 / 1500 700 / 700
Status
AC × 4
AC × 20
AC × 66
Set Name Test Cases
Sample 0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt
Subtask1 0_00.txt, 0_01.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt
All 0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 2_00.txt, 2_01.txt, 2_02.txt, 2_03.txt, 2_04.txt, 2_05.txt, 2_06.txt, 2_07.txt, 2_08.txt, 2_09.txt, 2_10.txt, 2_11.txt, 2_12.txt, 2_13.txt, 2_14.txt, 2_15.txt, 2_16.txt, 2_17.txt, 2_18.txt, 2_19.txt, 2_20.txt, 2_21.txt, 2_22.txt, 2_23.txt, 2_24.txt, 2_25.txt, 2_26.txt, 2_27.txt, 2_28.txt, 2_29.txt, 2_30.txt, 2_31.txt, 2_32.txt, 2_33.txt, 2_34.txt, 2_35.txt, 2_36.txt, 2_37.txt, 2_38.txt, 2_39.txt, 2_40.txt, 2_41.txt, 2_42.txt, 2_43.txt
Case Name Status Exec Time Memory
0_00.txt AC 11 ms 5120 KB
0_01.txt AC 9 ms 2944 KB
0_02.txt AC 16 ms 5120 KB
0_03.txt AC 11 ms 5120 KB
1_00.txt AC 12 ms 5120 KB
1_01.txt AC 109 ms 15872 KB
1_02.txt AC 85 ms 10624 KB
1_03.txt AC 65 ms 8696 KB
1_04.txt AC 94 ms 11904 KB
1_05.txt AC 96 ms 11520 KB
1_06.txt AC 96 ms 11520 KB
1_07.txt AC 95 ms 10624 KB
1_08.txt AC 113 ms 12160 KB
1_09.txt AC 82 ms 8704 KB
1_10.txt AC 87 ms 8448 KB
1_11.txt AC 88 ms 8448 KB
1_12.txt AC 91 ms 8320 KB
1_13.txt AC 69 ms 6144 KB
1_14.txt AC 80 ms 8448 KB
1_15.txt AC 89 ms 8320 KB
1_16.txt AC 67 ms 6144 KB
1_17.txt AC 92 ms 8320 KB
2_00.txt AC 17 ms 5120 KB
2_01.txt AC 579 ms 17276 KB
2_02.txt AC 397 ms 13056 KB
2_03.txt AC 210 ms 8824 KB
2_04.txt AC 496 ms 13056 KB
2_05.txt AC 520 ms 12928 KB
2_06.txt AC 511 ms 12928 KB
2_07.txt AC 498 ms 13056 KB
2_08.txt AC 516 ms 12928 KB
2_09.txt AC 304 ms 8704 KB
2_10.txt AC 359 ms 8576 KB
2_11.txt AC 418 ms 8576 KB
2_12.txt AC 457 ms 8448 KB
2_13.txt AC 72 ms 6144 KB
2_14.txt AC 88 ms 8832 KB
2_15.txt AC 462 ms 8448 KB
2_16.txt AC 67 ms 6144 KB
2_17.txt AC 448 ms 8448 KB
2_18.txt AC 8 ms 2944 KB
2_19.txt AC 95 ms 13180 KB
2_20.txt AC 68 ms 8824 KB
2_21.txt AC 573 ms 17276 KB
2_22.txt AC 104 ms 13056 KB
2_23.txt AC 108 ms 13056 KB
2_24.txt AC 111 ms 12928 KB
2_25.txt AC 101 ms 13184 KB
2_26.txt AC 107 ms 12928 KB
2_27.txt AC 85 ms 8832 KB
2_28.txt AC 94 ms 8576 KB
2_29.txt AC 91 ms 8576 KB
2_30.txt AC 97 ms 8448 KB
2_31.txt AC 67 ms 6144 KB
2_32.txt AC 99 ms 8704 KB
2_33.txt AC 101 ms 8448 KB
2_34.txt AC 67 ms 6144 KB
2_35.txt AC 100 ms 8448 KB
2_36.txt AC 210 ms 8824 KB
2_37.txt AC 219 ms 8824 KB
2_38.txt AC 208 ms 8824 KB
2_39.txt AC 219 ms 8824 KB
2_40.txt AC 208 ms 8824 KB
2_41.txt AC 219 ms 8824 KB
2_42.txt AC 209 ms 8824 KB
2_43.txt AC 214 ms 8824 KB