md一个sbset题调了我一个上午···我可能是智障吧····注意set的end()返回的是迭代器最后的一个位置··这个位置并没有赋值···因此要求末位的点需要*--set.end();
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<cstring>
#include<string>
#include<algorithm>
#include<set>
using namespace std;
set<int>st;
set<int>:: iterator t;
const int inf=0x3f3f3f3f;
const int N=1e5+5;
int first[N],go[N*2],next[N*2],val[N*2],tot,n,m,dfn[N],cnt,jud[N],id[N],deep[N],g[N][20];
long long dis[N],ans;
inline int R()
{
char c;int f=0;
for(c=getchar();c<‘0‘||c>‘9‘;c=getchar());
for(;c<=‘9‘&&c>=‘0‘;c=getchar())
f=(f<<3)+(f<<1)+c-‘0‘;
return f;
}
inline void comb(int a,int b,int c)
{
next[++tot]=first[a],first[a]=tot,go[tot]=b,val[tot]=c;
next[++tot]=first[b],first[b]=tot,go[tot]=a,val[tot]=c;
}
inline void dfs(int u,int fa)
{
dfn[u]=++cnt;id[cnt]=u;
for(int e=first[u];e;e=next[e])
{
int v=go[e];if(v==fa) continue;
dis[v]=(long long)val[e]+dis[u];g[v][0]=u;deep[v]=deep[u]+1;
dfs(v,u);
}
}
inline int get(int a,int b)
{
if(deep[a]<deep[b]) swap(a,b);
int i,j;
for(i=0;(1<<i)<=deep[a];i++);i--;
for(j=i;j>=0;j--)
if(deep[a]-(1<<j)>=deep[b]) a=g[a][j];
if(a==b) return a;
for(i=17;i>=0;i--)
if(g[a][i]!=g[b][i])
a=g[a][i],b=g[b][i];
return g[a][0];
}
inline long long Dis(int a,int b)
{
int lca=get(a,b);
return dis[a]+dis[b]-dis[lca]*2;
}
inline int pre(int x)
{
t=st.find(dfn[x]);
return t==st.begin()?0:id[*--t];
}
inline int nxt(int x)
{
t=st.find(dfn[x]);
return ++t==st.end()?0:id[*t];
}
inline void Insert(int x)
{
st.insert(dfn[x]);
int l=pre(x);int r=nxt(x);
if(l) ans+=Dis(l,x);
if(r) ans+=Dis(r,x);
if(l&&r) ans-=Dis(l,r);
}
inline void Delete(int x)
{
int l=pre(x);int r=nxt(x);
if(l) ans-=Dis(l,x);
if(r) ans-=Dis(r,x);
if(l&&r) ans+=Dis(l,r);
st.erase(dfn[x]);
}
int main()
{
//freopen("a.in","r",stdin);
n=R(),m=R();int a,b,c;
for(int i=1;i<n;i++)
{
a=R(),b=R(),c=R();
comb(a,b,c);
}
deep[1]=1;dfs(1,0);
for(int i=1;i<=17;i++)
for(int j=1;j<=n;j++)
g[j][i]=g[g[j][i-1]][i-1];
while(m--)
{
a=R();jud[a]=(jud[a]+1)%2;
if(jud[a])
Insert(a);
else
Delete(a);
printf("%lld\n",st.size()?ans+Dis(id[*st.begin()],id[*--st.end()]):0);
}
return 0;
}