void count(int u,int &ans){
map<int,int>vps,ps;
ps[0]=0;
for(int i=head[u];i;i=edge[i].next){
int v=edge[i].to;
if(vis[v])continue;
vps.clear();
dep[v]=edge[i].L;
cost[v]=edge[i].D;
init(v,u,vps);
int size=vps.size();
int j;
for(it=ps.begin();it!=ps.end();it++);
for(it=vps.begin(),j=1;j<=size;it++,j++){
zt=ps.upper_bound(m-(*it).first);
if(zt!=ps.begin())ans=max(ans,(*(--zt)).second+(*it).second);
}
for(it=vps.begin(),j=1;j<=size;it++,j++)insert((*it).first,(*it).second,ps);
}
}
其中
for(it=ps.begin();it!=ps.end();it++);
这一句如果不加就会奇怪的越界
这是完整代码
这是样例
1
7 5
1 2 1 1
2 3 1 1
3 4 1 1
4 5 1 1
2 6 1 1
1 7 1 1