110202024-06-06 16:02:30gortomiA Day in Olbiacpp17Futási hiba 0/100825ms17120 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<vector<int> > g;
vector<bool> vis;
vector<int> s;
const int e = 100000;
int db[200005];
ll f, m;
ll ans = 0;
void calc(int v, int p)
{
    s[v] = 1;
    for(auto x : g[v])
    {
        if(x > m) break;
        if(vis[x] || x == p) continue;
        calc(x, v);
        s[v] += s[x];
    }
}
int findc(int v, int p, int bp)
{
    for(auto x : g[v])
    {
        if(x > m) break;
        if(x == p || vis[x]) continue;
        if(s[x] > s[bp] / 2) return findc(x, v, bp);
    }
    return v;
}
vector<ll> act;
void dfs(int v, int p, int dep)
{
    for(auto x : g[v])
    {
        if(x > m) break;
        if(vis[x] || x == p) continue;
        dfs(x, v, dep + 1);
    }
    ll mul = dep - v * f;
    if(abs(mul) <= e)
    {
        ans += db[e - mul];
        act.push_back(mul + e);
    }
}
void dec(int v)
{
    calc(v, -1);
    int c = findc(v, -1, v);
    vis[c] = 1;
    vector<int> fi;
    db[e - v * f]++;
    for(auto x : g[c])
    {
        act.clear();
        if(x > m) break;
        if(vis[x]) continue;
        dfs(x, -1, 1);
        for(auto y : act) db[y]++, fi.push_back(y);
    }
    db[e - f * v]--;
    for(auto x : fi) db[x]--;
    for(auto x : g[c])
    {
        if(x > m) break;
        if(vis[x]) continue;
        dec(x);
    }
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    g.resize(n);
    vis.resize(n);
    s.resize(n);
    for(int i = 0; i < n - 1; i++)
    {
        int x, y;
        cin >> x >> y;
        g[x].push_back(y);
        g[y].push_back(x);
    }
    for(int i = 0; i < n; i++)
    {
        sort(g[i].begin(), g[i].end());
    }
    for(f = 1; f < n; f++)
    {
        m = n / f;
        for(int j = 0; j <= m; j++)
        {
            if(!vis[j]) dec(j);
            vis[j] = 0;
        }
        //cout << ans << "\n";
    }
    cout << ans << "\n";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Futási hiba3ms616 KiB
2Futási hiba3ms484 KiB
subtask20/16
3Futási hiba3ms484 KiB
4Futási hiba3ms484 KiB
5Futási hiba3ms576 KiB
6Futási hiba3ms484 KiB
subtask30/16
7Futási hiba3ms484 KiB
8Futási hiba4ms792 KiB
9Futási hiba4ms612 KiB
10Futási hiba4ms516 KiB
11Futási hiba4ms764 KiB
12Futási hiba4ms740 KiB
13Futási hiba4ms740 KiB
14Futási hiba4ms888 KiB
15Futási hiba4ms612 KiB
subtask40/16
16Elfogadva128ms9188 KiB
17Hibás válasz136ms9828 KiB
subtask50/52
18Hibás válasz609ms9156 KiB
19Hibás válasz514ms8736 KiB
20Hibás válasz825ms17080 KiB
21Elfogadva809ms14376 KiB
22Hibás válasz735ms14880 KiB
23Hibás válasz755ms15388 KiB
24Hibás válasz748ms16156 KiB
25Hibás válasz237ms17052 KiB
26Hibás válasz282ms17052 KiB
27Hibás válasz342ms17120 KiB
28Hibás válasz648ms17120 KiB
29Hibás válasz717ms17116 KiB
30Hibás válasz736ms17116 KiB
31Hibás válasz728ms17052 KiB