AtCoder Libraryについて導入したときのメモ書きを残す。
ほぼ自分用の備忘録。
目次
1. 導入
本家よりzipダウンロードする。
vscode上での環境整備をする。
c_cpp_properties.jsonのincludePathにACLのディレクトリをフルパスで追加。
インクルードするときのパス指定と理解。
"includePath": [
"C:/atcoder/ACL"//フルパスディレクトリをいれる
],
tasks.jsonのargsによくわからないけど下記を追加する。
"args": [
"-I",
"C:/atcoder/ACL",
],
Coder Runner使ってたので、こちらにもインクルードパスを追記。
"cpp": "cd $dir && g++ $fileName -I C:/atcoder/ACL -o $fileNameWithoutExt && $dir$fileNameWithoutExt" ,
なんかに下記をいれてエラーが出なければとりあえずおk。
#include <atcoder/all>
using namespace atcoder;
2. 終わりに
とりあえずこれで動いたのでメモとして残す。
unionfindの使用例。
#include <stdio.h>
#include <bits/stdc++.h>
#include <math.h>
#include <iostream>
#include <atcoder/all>
using namespace atcoder;
using namespace std;
typedef long long ll;
#define rep(i,a,b) for(int i=a;i<b;i++)
typedef long long ll; const int inf = INT_MAX / 2; const ll infl = 1LL << 60;
template<class T>bool chmax(T& a, const T& b) { if (a < b) { a = b; return 1; } return 0; }
template<class T>bool chmin(T& a, const T& b) { if (b < a) { a = b; return 1; } return 0; }
//cout << fixed << setprecision(15);
ll mod=1e9+7;
int main(){
ll n,m;
cin>>n>>m;
dsu d(n+1);//ACL n頂点のunionfind
map<ll,ll>MP;
rep(i,0,m){
ll a,b;
cin>>a>>b;
if(d.same(a,b)==1){//マージ前にa,bが同一グループか判定。
cout<<"No"<<endl;
return 0;
}
d.merge(a,b);//a,bを同じグループに追加。
MP[a]++;
MP[b]++;
if(MP[a]>2 || MP[b]>2){//頂点が3以上はNG
cout<<"No"<<endl;
return 0;
}
}
cout<<"Yes"<<endl;
}