답안 #522534

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
522534 2022-02-05T06:34:59 Z PCTprobability 자매 도시 (APIO20_swap) C++14
0 / 100
224 ms 21004 KB
#include <bits/stdc++.h>
using namespace std;
#if __has_include(<atcoder/all>)
#include <atcoder/all>
using namespace atcoder;
#endif
using ll = long long;
using ld = long double;
using ull = unsigned long long;
#define endl "\n"
typedef pair<int,int> Pii;
#define REP(i, n) for (int i = 0; i < (n); ++i)
#define REP3(i, m, n) for (int i = (m); (i) < int(n); ++ (i))
#define FOR(i,a,b) for(ll i=a;i<=(ll)(b);i++)
#define rep(i,a,b) for(int i=(int)(a);i<(int)(b);i++)
#define ALL(x) begin(x), end(x)
#define PB push_back
#define rrep(i,a,b) for(int i=a;i>=b;i--)
#define fore(i,a) for(auto &i:a)
#define all(s) (s).begin(),(s).end()
#define drep2(i, m, n) for (int i = (m)-1; i >= (n); --i)
#define drep(i, n) drep2(i, n, 0)
#define rever(vec) reverse(vec.begin(), vec.end())
#define sor(vec) sort(vec.begin(), vec.end())
#define fi first
#define se second
#define pb push_back
#define P pair<ll,ll>
#define PQminll priority_queue<ll, vector<ll>, greater<ll>>
#define PQmaxll priority_queue<ll,vector<ll>,less<ll>>
#define PQminP priority_queue<P, vector<P>, greater<P>>
#define PQmaxP priority_queue<P,vector<P>,less<P>>
#define NP next_permutation
//typedef string::const_iterator State;
//class ParseError {};
//const ll mod = 1000000009;
const ll mod = 998244353;
//const ll mod = 1000000007;
const ll inf = 4100000000000000000ll;
const ld eps = ld(0.000000001);
const long double pi = 3.141592653589793;
template<class T>void vcin(vector<T> &n){for(int i=0;i<int(n.size());i++) cin>>n[i];}
template<class T,class K>void vcin(vector<T> &n,vector<K> &m){for(int i=0;i<int(n.size());i++) cin>>n[i]>>m[i];}
template<class T>void vcout(vector<T> &n){for(int i=0;i<int(n.size());i++){cout<<n[i]<<" ";}cout<<endl;}
template<class T>void vcin(vector<vector<T>> &n){for(int i=0;i<int(n.size());i++){for(int j=0;j<int(n[i].size());j++){cin>>n[i][j];}}}
template<class T>void vcout(vector<vector<T>> &n){for(int i=0;i<int(n.size());i++){for(int j=0;j<int(n[i].size());j++){cout<<n[i][j]<<" ";}cout<<endl;}cout<<endl;}
void yes(bool a){cout<<(a?"yes":"no")<<endl;}
void YES(bool a){cout<<(a?"YES":"NO")<<endl;}
void Yes(bool a){cout<<(a?"Yes":"No")<<endl;}
void possible(bool a){ cout<<(a?"possible":"impossible")<<endl; }
void Possible(bool a){ cout<<(a?"Possible":"Impossible")<<endl; }
void POSSIBLE(bool a){ cout<<(a?"POSSIBLE":"IMPOSSIBLE")<<endl; }
template<class T>void print(T a){cout<<a<<endl;}
template<class T,class F>void print(pair<T,F> a){cout<<a.fi<<" "<<a.se<<endl;}
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;}
template<class T> void ifmin(T t,T u){if(t>u){cout<<-1<<endl;}else{cout<<t<<endl;}}
template<class T> void ifmax(T t,T u){if(t>u){cout<<-1<<endl;}else{cout<<t<<endl;}}
ll fastgcd(ll u,ll v){ll shl=0;while(u&&v&&u!=v){bool eu=!(u&1);bool ev=!(v&1);if(eu&&ev){++shl;u>>=1;v>>=1;}else if(eu&&!ev){u>>=1;}else if(!eu&&ev){v>>=1;}else if(u>=v){u=(u-v)>>1;}else{ll tmp=u;u=(v-u)>>1;v=tmp;}}return !u?v<<shl:u<<shl;}
ll modPow(ll a, ll n, ll mod) { if(mod==1) return 0;ll ret = 1; ll p = a % mod; while (n) { if (n & 1) ret = ret * p % mod; p = p * p % mod; n >>= 1; } return ret; }
vector<ll> divisor(ll x){ vector<ll> ans; for(ll i = 1; i * i <= x; i++){ if(x % i == 0) {ans.push_back(i); if(i*i!=x){ ans.push_back(x / ans[i]);}}}sor(ans); return ans; }
ll pop(ll x){return __builtin_popcountll(x);}
ll poplong(ll x){ll y=0;while(x){x/=2;y++;}return y;}
 
void cincout() {
  ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
  cout<< fixed << setprecision(10);
}
class UnionFind{
  public:
  vector<ll> time,par,d;
  vector<bool> three,roop;
  ll now;
  //par は親なら自分のサイズ、そうじゃないなら自分の親を入れる
  UnionFind(){
  }
  UnionFind(ll n){
    time.resize(n);
    par.resize(n);
    three.resize(n);
    roop.resize(n);
    d.resize(n);
    now=0;
    for(int i=0;i<n;i++){
      par[i]=1;
      time[i]=inf;
    }
  }
  ll root(ll x,ll ti){
    if(time[x]<=ti) return root(par[x],ti);
    else return x;
  }
  void merge(ll a,ll b){
    d[a]++;
    d[b]++;
    ll x=root(a,now);
    ll y=root(b,now);
    if(d[a]>=3) three[x]=true;
    if(d[b]>=3) three[y]=true;
    if(x==y){
      roop[x]=true;
      now++;
      return;
    }
    if(par[x]<par[y]) swap(x,y);
    if(three[y]) three[x]=true;
    if(roop[y]) roop[x]=true;
    par[x]+=par[y];
    par[y]=x;
    time[y]=now;
    now++;
  }
  bool issame(ll a,ll b,ll ti){
    a=root(a,ti);
    b=root(b,ti);
    return a==b;
  }
};
vector<int> u,v,w;
int n,m;
UnionFind uf;
vector<vector<ll>> d;
int getMinimumFuelCapacity(int X,int Y){
  int x=X,y=Y;
  ll ok=-1,ng=m+1;
  while(abs(ok-ng)>1){
    ll t=(ok+ng)/2;
    if(uf.issame(x,y,t)==false){
      ok=t;
    }
    else{
      ll v=uf.root(x,t);
      if(uf.roop[v]||uf.three[v]){
        ng=t;
      }
      else{
        ok=t;
      }
    }
  }
  if(ng>=m){
    return -1;
  }
  else{
    return d[ng][0];
  }
}
void init(int N,int M,vector<int> U,vector<int> V,vector<int> W){
  n=N;
  m=M;
  u=U;
  v=V;
  w=W;
  vector<vector<ll>> di;
  for(int i=0;i<m;i++){
    di.pb({w[i],u[i],v[i]});
  }
  sor(di);
  UnionFind ut(n);
  for(int i=0;i<m;i++){
    ut.merge(di[i][1],di[i][2]);
  }
  d=di;
  uf=ut;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 460 KB Output is correct
6 Correct 1 ms 460 KB Output is correct
7 Correct 1 ms 460 KB Output is correct
8 Correct 1 ms 460 KB Output is correct
9 Correct 58 ms 15324 KB Output is correct
10 Correct 64 ms 18644 KB Output is correct
11 Correct 62 ms 18356 KB Output is correct
12 Correct 70 ms 19428 KB Output is correct
13 Correct 76 ms 19484 KB Output is correct
14 Correct 89 ms 15440 KB Output is correct
15 Correct 197 ms 20420 KB Output is correct
16 Correct 195 ms 19896 KB Output is correct
17 Correct 224 ms 20992 KB Output is correct
18 Correct 142 ms 21004 KB Output is correct
19 Incorrect 98 ms 6372 KB Output isn't correct
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 182 ms 19900 KB Output is correct
4 Incorrect 151 ms 20864 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 460 KB Output is correct
6 Correct 1 ms 460 KB Output is correct
7 Correct 1 ms 460 KB Output is correct
8 Correct 1 ms 460 KB Output is correct
9 Incorrect 1 ms 204 KB Output isn't correct
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 460 KB Output is correct
6 Correct 1 ms 460 KB Output is correct
7 Correct 1 ms 460 KB Output is correct
8 Correct 1 ms 460 KB Output is correct
9 Correct 58 ms 15324 KB Output is correct
10 Correct 64 ms 18644 KB Output is correct
11 Correct 62 ms 18356 KB Output is correct
12 Correct 70 ms 19428 KB Output is correct
13 Correct 76 ms 19484 KB Output is correct
14 Correct 89 ms 15440 KB Output is correct
15 Correct 197 ms 20420 KB Output is correct
16 Correct 195 ms 19896 KB Output is correct
17 Correct 224 ms 20992 KB Output is correct
18 Correct 142 ms 21004 KB Output is correct
19 Correct 182 ms 19900 KB Output is correct
20 Incorrect 151 ms 20864 KB Output isn't correct
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -