萌新刚学OI2分钟,交这题WA10遍了,求dalao看看

P3320 [SDOI2015] 寻宝游戏

``` #include<bits/stdc++.h> #define MN 200050 #define ll long long using namespace std; std::set<ll>s; std::set<ll>::iterator it; ll n,m,cnt,head[MN],dfn[MN],dep[MN],num[MN]; ll vis[MN]; ll f[MN][21]; ll lg[MN]; ll dis[MN][18]; ll idx; ll Ans; struct tu { ll v,nxt; ll w; } e[MN]; void add(ll u,ll v,ll w) { e[++cnt].v=v; e[cnt].nxt=head[u]; e[cnt].w=w; head[u]=cnt; } void dfs(ll now,ll fa,ll dd) { dep[now]=dep[fa]+1; dfn[now]=++idx; f[now][0]=fa; num[idx]=now; dis[now][0]=dd; for(ll i=1; i<=lg[dep[now]]; i++) { f[now][i]=f[f[now][i-1]][i-1]; dis[now][i]=dis[now][i-1]+dis[f[now][i-1]][i-1]; } for(ll i=head[now]; i; i=e[i].nxt) { ll v=e[i].v; if(v!=fa) { dfs(v,now,e[i].w); } } } ll getl(ll x) { it=s.lower_bound(x); if(it==s.begin())it=s.end(); return *--it; } ll getr(ll x) { it=s.lower_bound(x); if(++it==s.end())it=s.begin(); return *it; } ll lca(ll x,ll y) { if(dep[x]<dep[y])swap(x,y); ll ans=0; while(dep[x]!=dep[y]) { ans+=dis[x][lg[dep[x]-dep[y]]]; x=f[x][lg[dep[x]-dep[y]]]; } if(x==y)return ans; for(ll k=lg[dep[x]]; k>=0; k--) if(f[x][k]!=f[y][k]) x=f[x][k],y=f[y][k],ans+=dis[x][k]+dis[y][k]; return ans+dis[x][0]+dis[y][0]; } int main() { scanf("%lld%lld",&n,&m); lg[0]=-1; ll sum=0; for(ll i=1; i<=n; i++) lg[i]=lg[i>>1]+1; for(ll i=1; i<=n-1; i++) { ll x,y,z; scanf("%lld%lld%lld",&x,&y,&z); add(x,y,z); add(y,x,z); } dfs(1,0,0); ll x; for(ll i=1; i<=m; i++) { scanf("%lld",&x); if (!vis[x]) { vis[x]^=1; s.insert(dfn[x]); sum+=lca(num[getl(dfn[x])],x)+lca(num[getr(dfn[x])],x)-lca(num[getl(dfn[x])],num[getr(dfn[x])]); } else { vis[x]^=1; sum+=lca(num[getl(dfn[x])],x)+lca(num[getr(dfn[x])],x)-lca(num[getl(dfn[x])],num[getr(dfn[x])]); } printf("%lld\n",sum); } return 0; } ``` 端正码风QAQ
by __gcd @ 2019-06-03 21:23:57


希望更丰富的展现?使用Markdown
by MatoiRyuuko @ 2019-06-03 21:24:46


@[梁宸铭123](/space/show?uid=149192) dalao也喜欢大括号换行啊,~~我也是的呢~~
by 灵光一闪 @ 2019-06-03 21:24:48


引战警告qwq~~虽然我也是~~
by 森岛帆高 @ 2019-06-03 21:26:20


这么长的代码一般不会有人看的吧
by Koakuma @ 2019-06-03 21:28:15


@[炮姐御坂美琴](/space/show?uid=161675) QAQ
by Limit @ 2019-06-03 21:28:21


两分钟有点过分了QwQ~
by 暗ざ之殇 @ 2019-07-16 12:41:16


现在看着题就会了呢,~~而且觉得好简单~~
by 红色OI再临 @ 2019-08-19 14:28:59


|