Submission #448223

#TimeUsernameProblemLanguageResultExecution timeMemory
448223cpp219스파이 (JOI13_spy)C++14
100 / 100
275 ms45344 KiB
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")

#include<bits/stdc++.h>
#define ll int
#define ld long double
#define fs first
#define sc second
using namespace std;
typedef pair<ll,ll> LL;
const ll N = 2e3 + 9;
const ll inf = 1e9 + 7;
vector<ll> g1[N],g2[N];
ll n,Q,x,y,JOI,IOI,a[N][N];
ll id_JOI[N],id_IOI[N],cur = 1,par_JOI[N],par_IOI[N];
void DFS_JOI(ll u,ll p){
    id_JOI[u] = cur; cur++; par_JOI[u] = p;
    for (auto i : g1[u]) if (i != p) DFS_JOI(i,u);
}

void DFS_IOI(ll u,ll p){
    id_IOI[u] = cur; cur++; par_IOI[u] = p;
    for (auto i : g2[u]) if (i != p) DFS_IOI(i,u);
}
ll dp[2500][2500];

ll f(ll x,ll y){
    if (x == 0||y == 0) return 0;
    if (dp[x][y] != -1) return dp[x][y];
    ll p = par_JOI[x],q = par_IOI[y];
    ll cx = id_JOI[x],cy = id_IOI[y];
    ll ans = f(p,y) + f(x,q) - f(p,q) + a[cx][cy];
    return dp[x][y] = ans;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    #define task "tst"
    if (fopen(task".INP","r")){
        freopen(task".INP","r",stdin);
        //freopen(task".OUT","w",stdout);
    }
    cin>>n>>Q;
    for (ll i = 1;i <= n;i++){
        cin>>x>>y;
        if (!x) JOI = i;
        else g1[x].push_back(i);
        if (!y) IOI = i;
        else g2[y].push_back(i);
    }
    DFS_JOI(JOI,0); cur = 1; DFS_IOI(IOI,0);  memset(dp,-1,sizeof(dp));
    while(Q--){
        cin>>x>>y;
        ll p = id_JOI[x],q = id_IOI[y]; a[p][q]++;
    }
    //for (ll i = 1;i <= n;i++) cout<<id_JOI[i]<<" "<<id_IOI[i]<<"\n"; return 0;
    for (ll i = 1;i <= n;i++) cout<<f(i,i)<<"\n";
}

Compilation message (stderr)

spy.cpp:2: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    2 | #pragma GCC optimization ("O3")
      | 
spy.cpp:3: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    3 | #pragma GCC optimization ("unroll-loops")
      | 
spy.cpp: In function 'int main()':
spy.cpp:42:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   42 |         freopen(task".INP","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...