Submission #3880132
Source Code Expand
#include <stdio.h>
#include <algorithm>
#include <assert.h>
#include <bitset>
#include <cmath>
#include <complex>
#include <deque>
#include <functional>
#include <iostream>
#include <limits.h>
#include <map>
#include <math.h>
#include <queue>
#include <set>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <time.h>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#pragma warning(disable:4996)
#pragma comment(linker, "/STACK:336777216")
using namespace std;
#define mp make_pair
#define Fi first
#define Se second
#define pb(x) push_back(x)
#define szz(x) ((int)(x).size())
#define rep(i, n) for(int i=0;i<n;i++)
#define all(x) (x).begin(), (x).end()
#define ldb ldouble
typedef unsigned int uint;
typedef tuple<int, int, int> t3;
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef pair <ll, int> pli;
typedef pair <db, db> pdd;
int IT_MAX = 1 << 19;
const ll MOD = 1000000007;
const int INF = 0x3f3f3f3f;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
const db PI = acos(-1);
const db ERR = 1e-10;
const int MX = 200005;
struct UF{
int t[MX], c1[MX], c2[MX];
int find(int x){ return t[x] ? t[x] = find(t[x]) : x; }
int merge(int a, int b){ // a <- b
a = find(a), b = find(b);
if(a == b) return false;
t[b] = a; c1[a] += c1[b]; c2[a] += c2[b];
return true;
}
}uf;
int dp[MX], tdp[MX];
int main()
{
int N, M;
scanf("%d%d", &N, &M);
set<pii> L;
for(int i = 1; i <= N; i++){
for(int j = i+1; j <= N; j++) L.emplace(i, j);
}
for(int i = 1; i <= M; i++){
int a, b;
scanf("%d%d", &a, &b);
if(a > b) swap(a, b);
L.erase(pii(a, b));
}
for(int i = 1; i <= N; i++) uf.c1[i*2] = uf.c2[i*2+1] = 1;
for(pii c : L){
uf.merge(c.second*2, c.first*2+1);
uf.merge(c.first*2, c.second*2+1);
}
for(int i = 1; i <= N; i++) if(uf.find(i*2) == uf.find(i*2+1)) return !printf("-1\n");
for(int i = 1; i <= N; i++){
if(uf.find(i*2) != uf.find(i*2+1)) uf.t[uf.find(i*2)] = uf.find(i*2+1);
}
dp[0] = 1;
for(int i = 2; i <= 2*N+1; i ++){
if(uf.find(i) != i) continue;
for(int i = 0; i <= N; i++) tdp[i] = 0;
int c = uf.c1[i];
for(int t = N; t >= c; t--) tdp[t] |= dp[t-c];
c = uf.c2[i];
for(int t = N; t >= c; t--) tdp[t] |= dp[t-c];
for(int i = 0; i <= N; i++) dp[i] = tdp[i];
}
int ans = 1e9;
for(int i = 1; i < N; i++) if(dp[i]) ans = min(ans, i*(i-1)/2 + (N-i)*(N-i-1)/2);
if(ans == 1e9) ans = -1;
printf("%d\n", ans);
}
Submission Info
| Submission Time |
|
| Task |
E - Independence |
| User |
zigui |
| Language |
C++14 (GCC 5.4.1) |
| Score |
700 |
| Code Size |
2687 Byte |
| Status |
AC |
| Exec Time |
235 ms |
| Memory |
11776 KiB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:72:23: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &N, &M);
^
./Main.cpp:79:24: 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 |
All |
| Score / Max Score |
0 / 0 |
700 / 700 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
sample1.txt, sample2.txt, sample3.txt, sample4.txt |
| All |
sample1.txt, sample2.txt, sample3.txt, sample4.txt, 1.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 2.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 3.txt, 4.txt, 5.txt, 6.txt, 7.txt, 8.txt, 9.txt, sample1.txt, sample2.txt, sample3.txt, sample4.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 1.txt |
AC |
3 ms |
512 KiB |
| 10.txt |
AC |
3 ms |
512 KiB |
| 11.txt |
AC |
217 ms |
11776 KiB |
| 12.txt |
AC |
212 ms |
11648 KiB |
| 13.txt |
AC |
194 ms |
11008 KiB |
| 14.txt |
AC |
180 ms |
11264 KiB |
| 15.txt |
AC |
225 ms |
11776 KiB |
| 16.txt |
AC |
202 ms |
11008 KiB |
| 17.txt |
AC |
216 ms |
11264 KiB |
| 18.txt |
AC |
27 ms |
2304 KiB |
| 19.txt |
AC |
235 ms |
11776 KiB |
| 2.txt |
AC |
26 ms |
2432 KiB |
| 20.txt |
AC |
230 ms |
11648 KiB |
| 21.txt |
AC |
200 ms |
11008 KiB |
| 22.txt |
AC |
216 ms |
11264 KiB |
| 23.txt |
AC |
224 ms |
11776 KiB |
| 24.txt |
AC |
116 ms |
7168 KiB |
| 25.txt |
AC |
79 ms |
11776 KiB |
| 26.txt |
AC |
1 ms |
256 KiB |
| 27.txt |
AC |
1 ms |
256 KiB |
| 28.txt |
AC |
1 ms |
256 KiB |
| 29.txt |
AC |
1 ms |
256 KiB |
| 3.txt |
AC |
221 ms |
11776 KiB |
| 4.txt |
AC |
230 ms |
11648 KiB |
| 5.txt |
AC |
207 ms |
11008 KiB |
| 6.txt |
AC |
201 ms |
11264 KiB |
| 7.txt |
AC |
222 ms |
11648 KiB |
| 8.txt |
AC |
3 ms |
512 KiB |
| 9.txt |
AC |
27 ms |
2304 KiB |
| sample1.txt |
AC |
1 ms |
256 KiB |
| sample2.txt |
AC |
1 ms |
256 KiB |
| sample3.txt |
AC |
1 ms |
256 KiB |
| sample4.txt |
AC |
1 ms |
256 KiB |