Submission #212072

# Submission time Handle Problem Language Result Execution time Memory
212072 2020-03-22T08:29:40 Z abacaba Making Friends on Joitter is Fun (JOI20_joitter2) C++14
0 / 100
31 ms 47360 KB
#include <iostream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <cstring>
#include <chrono>
#include <vector>
#include <map>
#include <random>
#include <set>
#include <algorithm>
#include <math.h>
#include <cstdio>
#include <stdio.h>
#include <queue>
#include <bitset>
#include <cstdlib>
#include <deque>
#include <cassert>
#include <stack>
using namespace std;
 
#define mp make_pair
#define f first
#define se second
#define pb push_back
#define ppb pop_back
#define ll long long
#define ull unsigned long long
#define cntbit(x) __builtin_popcount(x)
#define endl '\n'
#define uset unordered_set
#define umap unordered_map
#define all(x) x.begin(), x.end()
#define pii pair<int, int>
#define ld long double
#define pll pair<long long, long long>
#define int long long

template <typename T> void Min(T &a, T b) {
    a = min(a, b);
}
 
template <typename T> void Max(T &a, T b) {
    a = max(a, b);
}

ostream &operator << (ostream &cout, vector <int> &a) {
	cout << "{";
	for (auto & it : a) cout << it << ", ";
	cout << "}";
	return cout;
}

ostream &operator << (ostream &cout, set <int> &a) {
	cout << "{";
	for (auto & it : a) cout << it << ", ";
	cout << "}";
	return cout;
}

const int mod = 1e9 + 7;
const int inf = 2e9;
const int N = 3e5 + 15;
int n, m, p[N], sz[N];

set <int> gr[N], gr_find[N];

set <int> g[N];

int find(int v) {
	if(v == p[v])
		return v;
	return p[v] = find(p[v]);
}

inline void unio(int a, int b) {
	a = find(a);
	b = find(b);
	if(a != b) {
		// if(gr[a].size() < gr[b].size())
		// 	swap(a, b);

		// gr[a].insert(gr[b].begin(), gr[b].end());

		p[b] = a;
		sz[a] += sz[b];
	}
}

ll ans;

inline void slow_calc_ans(){
	ans = 0;
	for(int i = 1; i <= n; ++i) {
		set <int> s = {};
		for(int to : g[i]) {
			if(find(i) != find(to))
				s.insert(find(to));
		}
		for(int j : s)
			ans += sz[j];
	}
	set <int> s = {};
	for(int i = 1; i <= n; ++i)
		s.insert(find(i));
	for(int i : s)
		ans += sz[i] * (sz[i] - 1);
	return;
	for(int v = 1; v <= n; ++v)
		s.insert(find(v));

	ans = 0;

	for(int j : s) {
		for(int k : gr[j])
			if(find(k) != find(j))
				ans += sz[find(j)];

		ans += 1ll * sz[j] * (sz[j] - 1);
	}

}

main() {
	for(int i = 0; i < N; ++i)
		p[i] = i, sz[i] = 1;
	ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0);
	// freopen("input.txt", "r", stdin);
	cin >> n >> m;
	while(m--) {
		int u, v;
		cin >> u >> v;

		if(find(u) == find(v)) {
			cout << ans << endl;
			continue;
		}

		bool flag = false;

		for(int j = 1; j <= n; ++j) {
			for(int to : g[j])
				if(find(j) == find(v) && find(to) == find(u))
					flag = true;
		}

		g[u].insert(v);

		// for(int j : gr[find(u)])
		// 	flag |= (find(j) == find(v));

		if(flag)
			unio(u, v);
		// else
		// 	gr[find(v)].insert(u);

		slow_calc_ans();

		cout << ans << endl;
	}
	return 0;
}

Compilation message

joitter2.cpp:125:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main() {
      ^
# Verdict Execution time Memory Grader output
1 Correct 30 ms 47360 KB Output is correct
2 Correct 31 ms 47232 KB Output is correct
3 Incorrect 29 ms 47232 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 30 ms 47360 KB Output is correct
2 Correct 31 ms 47232 KB Output is correct
3 Incorrect 29 ms 47232 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 30 ms 47360 KB Output is correct
2 Correct 31 ms 47232 KB Output is correct
3 Incorrect 29 ms 47232 KB Output isn't correct
4 Halted 0 ms 0 KB -