結果
問題 | No.2418 情報通だよ!Nafmoくん |
ユーザー |
![]() |
提出日時 | 2023-08-12 13:52:49 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 60 ms / 2,000 ms |
コード長 | 2,005 bytes |
コンパイル時間 | 1,881 ms |
コンパイル使用メモリ | 199,272 KB |
最終ジャッジ日時 | 2025-02-16 03:49:18 |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 21 |
ソースコード
#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<ll,ll> PP;//#define MOD 1000000007#define MOD 998244353#define INF 2305843009213693951//#define INF 810114514#define PI 3.141592653589#define setdouble setprecision#define REP(i,n) for(ll i=0;i<(n);++i)#define OREP(i,n) for(ll i=1;i<=(n);++i)#define RREP(i,n) for(ll i=(n)-1;i>=0;--i)#define ALL(v) (v).begin(), (v).end()#define GOODBYE do { cout << "-1" << endl; return 0; } while (false)#define MM <<" "<<#define Endl endl#define debug true#define debug2 falseclass unionfind{// Copyright (c) 2023 0214sh7// https://github.com/0214sh7/library/private:std::vector<int> UF,rank,size_;public:void init(int N){UF.clear();rank.clear();size_.clear();for(int i=0;i<N;i++){UF.push_back(i);rank.push_back(0);size_.push_back(1);}}unionfind(int N){init(N);}int root(int k){if(UF[k]==k){return k;}else{UF[k]=root(UF[k]);return UF[k];}}bool same(int p,int q){return root(p)==root(q);}void unite(int P,int Q){int p=root(P);int q=root(Q);if(p==q)return;if(rank[p]<rank[q])std::swap(p,q);UF[q]=p;if(rank[p]==rank[q])rank[p]++;size_[p] += size_[q];size_[q] = 0;}int size(int k){return size_[root(k)];}};int main(void){//cin.tie(nullptr);//ios::sync_with_stdio(false);ll N,M;cin >> N >> M;vector<ll> A(M),B(M);REP(i,M){cin >> A[i] >> B[i];A[i]--;B[i]--;}unionfind UF(2*N);REP(i,M){UF.unite(A[i],B[i]);}ll Ans = 0;REP(i,2*N){if(i!=UF.root(i))continue;if(UF.size(i)%2==1)Ans++;}Ans /= 2;cout << Ans << endl;return 0;}