답안 #946836

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
946836 2024-03-15T06:21:56 Z shenfe1 Amusement Park (JOI17_amusement_park) C++14
0 / 100
227 ms 262144 KB
#include "Joi.h"

#include <bits/stdc++.h>

#pragma optimize("Ofast")
#pragma target("avx2")

using namespace std;

#define ll long long
#define ld long double
#define pb push_back
#define pf push_front
#define pii pair<int,int>
#define all(v) v.begin(),v.end()
#define F first
#define S second
#define mem(a,i) memset(a,i,sizeof(a))
#define sz(s) (int)s.size()
#define y1 yy
#define ppb pop_back
#define lb lower_bound
#define ub upper_bound
#define gcd(a,b) __gcd(a,b)
#define in insert
// #define int ll

const int MAX=1e5+15;
const int B=500;
const int maxB=1000;
const int N=104;
const int block=450;
const ll inf=1e9;  
const int mod=1e9+7;
const int mod1=1e9+9;
const ld eps=1e-9;

int dx[8]={1,0,-1,0,1,-1,-1,1};
int dy[8]={0,1,0,-1,1,-1,1,-1};

int binpow(int a,int n){
  if(!n)return 1;
  if(n%2==1)return a*binpow(a,n-1)%mod;
  int k=binpow(a,n/2);
  return k*k%mod;
}

struct JOIKUN{
  vector<int> g[MAX];
  vector<int> g1[MAX];
  int use[MAX];
  int d[MAX],root;

  void dfs(int v){
    use[v]=1;
    for(auto to:g[v]){
      if(!use[to]){
        d[to]=d[v]+1;
        g1[v].pb(to);
        g1[to].pb(v);
        dfs(to);
      }
    }
  }

  int mxD=0;
  int D[MAX];

  void dfs1(int v,int p=-1){
    mxD=max(mxD,d[v]+1);
    for(auto to:g1[v]){
      if(to==p)continue;
      d[to]=d[v]+1;
      dfs1(to,v);
    }
  }

  void calc(int v,int p=-1){
    D[v]=v;
    for(auto to:g1[v]){
      if(to==p)continue;
      calc(to,v);
      if(d[D[v]]<d[D[to]])D[v]=D[to];
    }
  }

  int bit(ll i,int j){
    return (i>>j)&1;
  }

  vector<int> top;

  void topsort(int v,int p=-1){
    top.pb(v);
    for(auto to:g[v]){
      if(to==p)continue;
      topsort(to,v);
    }
  }

  void solve(int N,int M,int A[],int B[],ll X,int T){
    for(int i=0;i<M;i++){
      g[A[i]].pb(B[i]);
      g[B[i]].pb(A[i]);
    }
    dfs(0);
    for(int i=0;i<N;i++){
      use[i]=0;
      if(d[i]>d[root])root=i;
    }
    d[root]=0;
    dfs1(root);
    calc(root);
    if(mxD>=60){
      // cout<<X<<"\n";
      for(int i=0;i<N;i++){
        if(d[D[i]]+1>=60){
          MessageBoard(i,bit(X,d[i]%60));
          // cout<<d[i]<<" "<<bit(X,d[i]%60)<<"\n";
        }
        else{
          MessageBoard(i,0);
        }
      }
      return;
    }
    topsort(root);
    for(int i=0;i<N;i++){
      MessageBoard(top[i],bit(X,i%60));
    }
  }
}t;

void Joi(int N, int M, int A[], int B[], long long X, int T) {
  t.solve(N,M,A,B,X,T);
}
#include "Ioi.h"

#include <bits/stdc++.h>

#pragma optimize("Ofast")
#pragma target("avx2")

using namespace std;

#define ll long long
#define ld long double
#define pb push_back
#define pf push_front
#define pii pair<int,int>
#define all(v) v.begin(),v.end()
#define F first
#define S second
#define mem(a,i) memset(a,i,sizeof(a))
#define sz(s) (int)s.size()
#define y1 yy
#define ppb pop_back
#define lb lower_bound
#define ub upper_bound
#define gcd(a,b) __gcd(a,b)
#define in insert
// #define int ll

const int MAX=1e5+15;
const int B=500;
const int maxB=1000;
const int N=104;
const int block=450;
const ll inf=1e9;  
const int mod=1e9+7;
const int mod1=1e9+9;
const ld eps=1e-9;

struct IOICHAN{

  ll ans=0;

  vector<int> g[MAX];
  vector<int> g1[MAX];
  int use[MAX];
  int d[MAX],root;
  int pr[MAX];

  void dfs(int v){
    use[v]=1;
    for(auto to:g[v]){
      if(!use[to]){
        d[to]=d[v]+1;
        g1[v].pb(to);
        g1[to].pb(v);
        dfs(to);
      }
    }
  }

  int mxD=0;
  int D[MAX];
  int big[MAX];

  void dfs1(int v,int p=-1){
    pr[v]=p;
    mxD=max(mxD,d[v]+1);
    for(auto to:g1[v]){
      if(to==p)continue;
      d[to]=d[v]+1;
      dfs1(to,v);
    }
  }

  void calc(int v,int p=-1){
    D[v]=v;
    big[v]=v;
    for(auto to:g1[v]){
      if(to==p)continue;
      calc(to,v);
      if(d[D[v]]<d[D[to]]){
        D[v]=D[to];
        big[v]=to;
      }
    }
  }

  int bit(ll i,int j){
    return (i>>j)&1;
  }

  vector<int> top;

  void topsort(int v,int p=-1){
    top.pb(v);
    for(auto to:g[v]){
      if(to==p)continue;
      topsort(to,v);
    }
  }

  set<pii> st;

  ll solve(int N,int M,int A[],int B[],int P,int V,int T){
    for(int i=0;i<M;i++){
      g[A[i]].pb(B[i]);
      g[B[i]].pb(A[i]);
      st.in({A[i],B[i]});
      st.in({B[i],A[i]});
    }
    dfs(0);
    for(int i=0;i<N;i++){
      use[i]=0;
      if(d[i]>d[root])root=i;
    }
    d[root]=0;
    dfs1(root);
    calc(root);
    // cout<<mxD<<"\n";
    if(mxD+1>=60){
      // cout<<d[59]<<"\n";
      while(d[P]%60!=0){
        // cout<<P<<" "<<d[P]<<" "<<pr[P]<<"\n";
        V=Move(pr[P]);
        P=pr[P];
      }
      // cout<<P<<"\n";
      ans+=V*(1ll<<0);
      for(int i=1;i<60;i++){
        // cout<<big[P]<<"\n";
        V=Move(big[P]);
        P=big[P];
        ans+=V*(1ll<<i);
      }
      // cout<<ans<<"\n";
      return ans;
    }
    topsort(root);
    while(P!=root){
      V=Move(pr[P]);
      P=pr[P];
    }
    ans+=V*(1ll<<0);
    for(int i=1;i<60;i++){
      int L=top[i];
      while(P!=L){
        if(st.count({P,L})){
          V=Move(L);
          P=L;
        }
        else{
          V=Move(pr[P]);
          P=pr[P];
        }
      }
      ans+=V*(1ll<<i);
    }
    return ans;
  }
}g;

long long Ioi(int N, int M, int A[], int B[], int P, int V, int T) {
  return g.solve(N,M,A,B,P,V,T);
}

Compilation message

Joi.cpp:5: warning: ignoring '#pragma optimize ' [-Wunknown-pragmas]
    5 | #pragma optimize("Ofast")
      | 
Joi.cpp:6: warning: ignoring '#pragma target ' [-Wunknown-pragmas]
    6 | #pragma target("avx2")
      | 

Ioi.cpp:5: warning: ignoring '#pragma optimize ' [-Wunknown-pragmas]
    5 | #pragma optimize("Ofast")
      | 
Ioi.cpp:6: warning: ignoring '#pragma target ' [-Wunknown-pragmas]
    6 | #pragma target("avx2")
      |
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 11804 KB Output is correct
2 Correct 3 ms 11812 KB Output is correct
3 Correct 4 ms 11812 KB Output is correct
4 Correct 2 ms 11796 KB Output is correct
5 Correct 2 ms 11812 KB Output is correct
6 Correct 3 ms 11808 KB Output is correct
7 Correct 3 ms 11804 KB Output is correct
8 Correct 2 ms 11804 KB Output is correct
9 Correct 3 ms 11812 KB Output is correct
10 Runtime error 227 ms 262144 KB Execution killed with signal 9
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 17432 KB Output is correct
2 Correct 31 ms 17432 KB Output is correct
3 Correct 31 ms 17448 KB Output is correct
4 Correct 19 ms 15424 KB Output is correct
5 Correct 19 ms 15936 KB Output is correct
6 Incorrect 18 ms 15444 KB Wrong Answer [7]
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 11808 KB Wrong Answer [7]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 32 ms 17364 KB Output is correct
2 Correct 33 ms 17248 KB Output is correct
3 Correct 31 ms 17352 KB Output is correct
4 Partially correct 20 ms 15332 KB Partially correct
5 Correct 19 ms 15724 KB Output is correct
6 Incorrect 18 ms 15424 KB Wrong Answer [7]
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 17420 KB Output is correct
2 Correct 28 ms 17324 KB Output is correct
3 Correct 34 ms 17376 KB Output is correct
4 Incorrect 19 ms 15668 KB Output isn't correct
5 Halted 0 ms 0 KB -