Submission #370806

# Submission time Handle Problem Language Result Execution time Memory
370806 2021-02-24T16:49:05 Z alirezasamimi100 Factories (JOI14_factories) C++17
15 / 100
8000 ms 151156 KB
#include <bits/stdc++.h>
#include <factories.h>
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
/*#pragma GCC optimize("O2")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx,avx2,sse,sse2,fma")*/
using namespace std;
using ll = long long int;
#define F first
#define S second
#define pb push_back
#define lc v<<1
#define rc v<<1|1
#define fast_io ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
const int N=5e5+10,LN=20,M=2e2+10,SQ=250,inf=1e9;
const ll INF=1e18;
const int MOD=1000000007 /*998244353*/;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using pll=pair<ll,ll>;
using pii=pair<int,int>;
#define ordered_set tree<ll, null_type,less<ll>, rb_tree_tag,tree_order_statistics_node_update>
ll pow(ll x, ll y, ll mod){
    ll ans=1;
    while (y != 0) {
        if (y & 1) ans = ans * x % mod;
        y >>= 1;
        x = x * x % mod;
    }
    return ans;
}
ll n,h[N],H[N],p[LN][N],st[N],t,q,mp[N],di[N];
vector<pll> adj[N];
vector<ll> z;
stack<ll> s;
queue<ll> pq;
bool iq[N];
void dfs(ll v, ll P=0){
    p[0][v]=P;
    st[v]=++t;
    for(auto [u,w] : adj[v]){
        if(u!=P) H[u]=H[v]+1,h[u]=h[v]+w,dfs(u,v);
    }
}
bool cmp(ll a, ll b){
    return st[a]<st[b];
}
ll LCA(ll v, ll u){
    if(H[u]<H[v]) swap(v,u);
    for(ll i=LN; i--;){
        if(H[p[i][u]]>=H[v]) u=p[i][u];
    }
    if(v==u) return v;
    for(ll i=LN; i--;){
        if(p[i][u]!=p[i][v]) u=p[i][u],v=p[i][v];
    }
    return p[0][v];
}
ll dist(ll v, ll u){
    ll z=LCA(v,u);
    return h[v]+h[u]-2*h[z];
}
void Init(int n, int A[], int B[], int D[]){
    fast_io;
    cin >> n;
    memset(di,63,sizeof di);
    memset(mp,-1,sizeof mp);
    for(ll i=0; i<n-1; i++){
        ll v=A[i],u=B[i],w=D[i];
        v++;
        u++;
        adj[v].pb({u,w});
        adj[u].pb({v,w});
    }
    dfs(H[1]=1);
    for(ll i=1; i<LN; i++)
        for(ll j=1; j<=n; j++)
            p[i][j]=p[i-1][p[i-1][j]];
}
ll Query(int S, int X[], int T, int Y[]){
    ll x=S,y=T,ans=INF;
    z.clear();
    while(!s.empty()) s.pop();
    for(ll i=0; i<x; i++){
      ll P=X[i];
      P++;
      z.pb(P);
      mp[P]=0;
    }
    for(ll i=0; i<y; i++){
      ll P=Y[i];
      P++;
      z.pb(P);
      mp[P]=1;
    }
    sort(z.begin(),z.end(),cmp);
    for(ll i=0; i<x+y-1; i++) z.pb(LCA(z[i],z[i+1]));
    z.pb(LCA(z[0],z[x+y-1]));
    sort(z.begin(),z.end(),cmp);
    z.resize(unique(z.begin(),z.end())-z.begin());
    s.push(z[0]);
    if(!mp[z[0]]) di[z[0]]=0,pq.push(z[0]),iq[z[0]]=1;
    adj[z[0]].clear();
    for(ll i=1; i<z.size(); i++){
      adj[z[i]].clear();
      while(LCA(z[i],s.top())!=s.top()) s.pop();
      ll d=dist(s.top(),z[i]);
      adj[s.top()].pb({z[i],d});
      adj[z[i]].pb({s.top(),d});
      s.push(z[i]);
      if(!mp[z[i]]) di[z[i]]=0,iq[z[i]]=1,pq.push(z[i]);
    }
    while(!pq.empty()){
      auto v=pq.front();
      pq.pop();
      if(mp[v]==1) ans=min(ans,di[v]);
      iq[v]=0;
      for(auto [u,w] : adj[v]){
        if(di[v]+w<di[u]){
          di[u]=di[v]+w;
          if(!iq[u]) pq.push(u);
        }
      }
    }
    for(ll i : z){
        mp[i]=-1;
        di[i]=di[0];
    }
    return ans;
}

Compilation message

factories.cpp:3: warning: ignoring #pragma comment  [-Wunknown-pragmas]
    3 | #pragma comment(linker, "/stack:200000000")
      | 
factories.cpp: In function 'll Query(int, int*, int, int*)':
factories.cpp:107:18: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  107 |     for(ll i=1; i<z.size(); i++){
      |                 ~^~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 65 ms 20604 KB Output is correct
2 Correct 2842 ms 29592 KB Output is correct
3 Correct 3483 ms 29444 KB Output is correct
4 Correct 3261 ms 29804 KB Output is correct
5 Correct 3040 ms 29804 KB Output is correct
6 Correct 2100 ms 29672 KB Output is correct
7 Correct 3503 ms 29676 KB Output is correct
8 Correct 3167 ms 29564 KB Output is correct
9 Correct 2999 ms 29860 KB Output is correct
10 Correct 2086 ms 29676 KB Output is correct
11 Correct 3530 ms 29640 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 18 ms 20460 KB Output is correct
2 Correct 5356 ms 149348 KB Output is correct
3 Execution timed out 8074 ms 151156 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 65 ms 20604 KB Output is correct
2 Correct 2842 ms 29592 KB Output is correct
3 Correct 3483 ms 29444 KB Output is correct
4 Correct 3261 ms 29804 KB Output is correct
5 Correct 3040 ms 29804 KB Output is correct
6 Correct 2100 ms 29672 KB Output is correct
7 Correct 3503 ms 29676 KB Output is correct
8 Correct 3167 ms 29564 KB Output is correct
9 Correct 2999 ms 29860 KB Output is correct
10 Correct 2086 ms 29676 KB Output is correct
11 Correct 3530 ms 29640 KB Output is correct
12 Correct 18 ms 20460 KB Output is correct
13 Correct 5356 ms 149348 KB Output is correct
14 Execution timed out 8074 ms 151156 KB Time limit exceeded
15 Halted 0 ms 0 KB -