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 |
|
|
|
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 |