c++ 0分 玄关!!!求助大佬!!!实在不会

P1600 [NOIP2016 提高组] 天天爱跑步

QwQ_77 @ 2024-03-29 21:43:00

1~#5 WA

7、#8、#11、#16 MLE

其他都是RE

孩子不会起函数名。。。

#include<bits/stdc++.h>
using namespace std;
int n,m; 
int fa[300000];//双亲表示法 
int w[300000][3];//记录观察员出现时间和每个观察员会观察到多少人
int te[300000];//临时数组(用于记录) 
struct H
{
    int s,t;
    int time[30000];
}h[15000];//记录每个节点的起点、终点和每一秒所到达的点 
void init()
{
    cin>>n>>m;
    for(int i=1;i<n;i++)
    {
        int u,v;
        cin>>u>>v;
        fa[v]=u; 
    }
}
void HH()
{
    int temp=1;//临时变量 
    for(int i=1;i<=m;i++)
        cin>>h[i].s>>h[i].t;
    for(int i=1;i<=n;i++)
    {   
        te[temp]==fa[h[i].t];
        temp++;
    }
    int cnt=1;
    for(int i=1;i<=temp;i++)
    for(int j=temp;j>=1;j--)
        h[i].time[cnt]=te[j];
}
void see()
{
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
    {
        if(h[j].time[w[i][1]]=i)
            w[i][2]++;
    }
}
int main()
{
    init();
    for(int i=1;i<=n;i++)
    {
        cin>>w[i][1];
        w[i][2]=0;
    }
    HH();
    see();
    for(int i=1;i<=n;i++)
        cout<<w[i][2]<<" ";
    return 0;
}

打完都不知道自己在打什么


by QwQ_77 @ 2024-03-30 12:49:23

修改结构体数组h大小之后,结果有改变


by QwQ_77 @ 2024-03-30 12:50:22

但还是0分qwq


by HEROBRINEH @ 2024-04-07 21:28:31

@QwQ_77 AC 求关


#include <bits/stdc++.h>
#define N 300005
#define int long long
#define endl '\n'
using namespace std;
int n,m;
vector <int> g[N];
vector <int> rec1[N],rec2[N],del1[N],del2[N];
int d[N],f[N][30],w[N],ans[N],c1[N<<2],c2[N<<2];
void dfs(int u,int fa) {
    d[u]=d[fa]+1,f[u][0]=fa;
    for (int i=1;i<=25;i++){
        f[u][i]=f[f[u][i-1]][i-1];
    }
    for (int i=0; i<g[u].size(); i++) {
        int v=g[u][i];
        if (v==fa) continue;
        dfs(v,u);
    }
}
int lca(int x,int y){
    if (d[x]<d[y]) swap(x,y);
    for (int i=25;i>=0;i--){
        if (d[f[x][i]]>=d[y]) x=f[x][i];
    }
    if (x==y) return x;
    for (int i=25;i>=0;i--){
        if (f[x][i]!=f[y][i]){
            x=f[x][i],y=f[y][i];
        }
    }
    return f[x][0];
}
void dfs2(int u,int fa) {
    int tmp1=c1[d[u]+w[u]+N],tmp2=c2[w[u]-d[u]+N];
    for (int i=0; i<g[u].size(); i++) {
        int v=g[u][i];
        if (v==fa) continue;
        dfs2(v,u);
    }
    for (int i=0;i<rec1[u].size();i++){
        int v=rec1[u][i];
        c1[v]++;
    }
    for (int i=0;i<rec2[u].size();i++){
        int v=rec2[u][i];
        c2[v]++;
    }
    ans[u]+=c1[d[u]+w[u]+N]-tmp1;
    ans[u]+=c2[w[u]-d[u]+N]-tmp2;
    for (int i=0;i<del1[u].size();i++){
        int v=del1[u][i];
        c1[v]--;
    }
    for (int i=0;i<del2[u].size();i++){
        int v=del2[u][i];
        c2[v]--;
    }
}
signed main (){
    int i,x,y;
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>m;
    for (i=1; i<n; i++) {
        cin>>x>>y;
        g[x].push_back(y);
        g[y].push_back(x);
    }
    d[1]=1;
    dfs(1,0);
    for (i=1;i<=n;i++){
        cin>>w[i];
    }
    for (i=1;i<=m;i++){
        cin>>x>>y;
        int k=lca(x,y);
        rec1[x].push_back(d[x]+N),rec2[y].push_back(d[x]-2*d[k]+N),del1[k].push_back(d[x]+N),del2[k].push_back(d[x]-2*d[k]+N);
        if (d[k]+w[k]==d[x]) ans[k]--;
    }
    dfs2(1,0);
    for (i=1;i<=n;i++){
        cout<<ans[i]<<" ";
    }
    return 0;
}

by QwQ_77 @ 2024-04-07 21:32:24

@HEROBRINEH

蟹蟹!!!!!!!(惊呼

尖叫)(扭曲)(阴暗的爬行) (爬行)(扭动)(阴暗地蠕动)(翻滚)(激烈地爬动)(扭曲)(痉挛)(嘶吼)(蠕动)(阴森的低吼)(爬行)(分裂)(走上岸)(扭动)(痉挛)(蠕动)(扭曲的行走)(不分对象攻击)(尖叫)(扭曲)(阴暗的爬行) (爬行)(扭动)(阴暗地蠕动)(翻滚)(激烈地爬动)(扭曲)(痉挛)(嘶吼)(蠕动)(阴森的低吼)(爬行)(分裂)(走上岸)(扭动)(痉挛)(蠕动)(扭曲的行走)(不分对象攻击)(尖叫)(扭曲)(阴暗的爬行) (爬行)(扭动)(阴暗地蠕动)(翻滚)(激烈地爬动)(扭曲)(痉挛)(嘶吼)(蠕动)(阴森的低吼)(爬行)(分裂)(走上岸)(扭动)(痉挛)(蠕动)(扭曲的行走)(不分对象攻击)

已关qaq


by QwQ_77 @ 2024-04-07 21:33:08

@HEROBRINEH 关注了


by QwQ_77 @ 2024-04-09 22:06:58

@HEROBRINEH

花了点时间看代码。。。

可以讲讲思路吗orz

我太蒻了


|