Submission #173479

#TimeUsernameProblemLanguageResultExecution timeMemory
173479jhwest2우호 조약 체결 (JOI14_friends)C++14
100 / 100
296 ms11384 KiB
#include <bits/stdc++.h> #define va first #define vb second using namespace std; typedef long long ll; typedef pair<int, int> pii; int N, M; int par[100010], size[100010]; vector<int> E[100010]; int Find(int a) { if (par[a] == a) return a; return par[a] = Find(par[a]); } void Union(int a, int b) { if (Find(a) == Find(b)) return; size[Find(a)] += size[Find(b)]; par[Find(b)] = Find(a); } void dfs(int key, int cur) { Union(key, cur); for (int nxt : E[cur]) { if (Find(nxt) == Find(cur)) continue; dfs(key, nxt); } } int main() { cin.tie(0); ios_base::sync_with_stdio(0); cin >> N >> M; for (int i=0; i<M; i++) { int x, y; cin >> x >> y; E[x].push_back(y); } for (int i=1; i<=N; i++) par[i] = i, size[i] = 1; for (int i=1; i<=N; i++) { if (E[i].size() >= 2) { for (int j=1; j<E[i].size(); j++) { Union(E[i][0], E[i][j]); dfs(E[i][0], E[i][0]); dfs(E[i][j], E[i][j]); } } } ll ans = 0; for (int i=1; i<=N; i++) { if (Find(i) != i) continue; ans += (ll)size[i] * (size[i]-1); } for (int i=1; i<=N; i++) { for (int edge : E[i]) { if (Find(i) != Find(edge)) ++ans; } } cout << ans; }

Compilation message (stderr)

friends.cpp: In function 'int main()':
friends.cpp:41:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for (int j=1; j<E[i].size(); j++) {
                  ~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...