답안 #1010940

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1010940 2024-06-29T14:41:44 Z imarn JOI tour (JOI24_joitour) C++17
0 / 100
838 ms 120080 KB
#include<bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("avx2")
#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define plx pair<ll,int>
#define f first
#define s second
#define pb push_back
#define all(x) x.begin(),x.end()
#define vi vector<int>
#define vl vector<ll>
#define vvi vector<vi>
using namespace std;
const int mxn=2e5+5;
vector<int>g[mxn],f;
int sz[mxn]{0};
bool vis[mxn]{0};
ll ans=0;
int getsz(int u,int p){
    sz[u]=1;
    for(auto v:g[u])if(v!=p&&!vis[v])sz[u]+=getsz(v,u);
    return sz[u];
}
int getct(int u,int p,int r){
    for(auto v:g[u])if(v!=p&&!vis[v]&&sz[v]*2>r)return getct(v,u,r);
    return u;
}
vector<ll>dp[10][mxn];
ll td[10][mxn]{0};
void gen1(int u,int p,int x,int id){
    dp[f[u]][x][id]++;
    if(f[u]==2)dp[3][x][id]+=dp[1][x][id];
    if(f[u]==1)dp[4][x][id]+=dp[0][x][id];
    for(auto v:g[u])if(v!=p&&!vis[v])gen1(v,u,x,id);
    dp[f[u]][x][id]--;
}
void gen2(int u,int p,int x,int id){
    for(auto v:g[u])if(v!=p&&!vis[v])gen2(v,u,x,id);
    dp[f[u]+5][x][id]++;
    if(f[u]==1)dp[8][x][id]+=dp[5][x][id];
    if(f[u]==2)dp[9][x][id]+=dp[6][x][id];
}
void gen3(int u,int p,int x,int id){
    dp[f[u]][x][id]++;
    for(auto v:g[u])if(v!=p&&!vis[v])gen3(v,u,x,id);
}
void play(int u){int id=-1;
    u = getct(u,u,getsz(u,u));vis[u]=1;
    for(auto v:g[u]){
        if(vis[v])continue;
        for(int i=0;i<10;i++)dp[i][u].pb(0);id++;
        gen1(v,u,u,id);gen2(v,u,u,id);gen3(v,u,u,id);
        for(int i=0;i<10;i++)td[i][u]+=dp[i][u][id];
    }for(int j=0;j<=id;j++){
        ans+=dp[0][u][j]*(td[3][u]-dp[3][u][j]);
        ans+=dp[8][u][j]*(td[2][u]-dp[2][u][j]);
        if(f[u]==1)ans+=dp[0][u][j]*(td[2][u]-dp[2][u][j]);
    }if(f[u]==0)ans+=td[3][u];if(f[u]==2)ans+=td[8][u];
    for(auto v:g[u])if(!vis[v])play(v);
}
void init(int N, std::vector<int> F, std::vector<int> U, std::vector<int> V,int Q){
    f=F;for(int i=0;i<N-1;i++)g[U[i]].pb(V[i]),g[V[i]].pb(U[i]);play(0);
}

void change(int X, int Y) {}

long long num_tours() {
  return ans;
}

Compilation message

joitour.cpp: In function 'void play(int)':
joitour.cpp:53:9: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
   53 |         for(int i=0;i<10;i++)dp[i][u].pb(0);id++;
      |         ^~~
joitour.cpp:53:45: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
   53 |         for(int i=0;i<10;i++)dp[i][u].pb(0);id++;
      |                                             ^~
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 52056 KB Output is correct
2 Incorrect 21 ms 52056 KB Wrong Answer [1]
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 52056 KB Output is correct
2 Incorrect 21 ms 52056 KB Wrong Answer [1]
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 20 ms 52056 KB Output is correct
2 Correct 826 ms 118352 KB Output is correct
3 Correct 838 ms 118396 KB Output is correct
4 Correct 789 ms 118456 KB Output is correct
5 Correct 820 ms 118340 KB Output is correct
6 Incorrect 310 ms 120080 KB Wrong Answer [1]
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 21 ms 52056 KB Output is correct
2 Incorrect 20 ms 52056 KB Wrong Answer [1]
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 22 ms 52056 KB Wrong Answer [1]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 52056 KB Output is correct
2 Incorrect 21 ms 52056 KB Wrong Answer [1]
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 52056 KB Output is correct
2 Incorrect 21 ms 52056 KB Wrong Answer [1]
3 Halted 0 ms 0 KB -