2017.7.19 Race 思考记录

来源:互联网 发布:java list 查询条件 编辑:程序博客网 时间:2024/06/03 10:29

   

    此题没有AC!!


但对拍了几个小时了,没有发现问题、、但就是过不了

如果有路过的dalao可以帮忙指导一下、、感激不尽


码(秒WA):

#include<iostream> #include<cstdio>#include<algorithm>#include<cstring>using namespace std;#define N 200007#define inf 1e9+7int tot,zhong[N*2],v[N*2],hou[N*2],xia[N],d[N],sz[N],i,max1,rt,x,y,z,k,ans[N],n;bool vis[N];void jia(int x,int y,int z){  ++tot,zhong[tot]=y,v[tot]=z,hou[tot]=xia[x],xia[x]=tot;}void jian(int x,int y,int z){jia(x,y,z);jia(y,x,z);}struct lalala{int d,ds;}q[100007];void zzx(int o,int fu){ // cout<<o<<endl;sz[o]=1;int maxx=0;for(int i=xia[o];i!=-1;i=hou[i])   {     int nd=zhong[i];     if(nd==fu||vis[nd])continue;     zzx(nd,o);     sz[o]+=sz[nd];     maxx=max(maxx,sz[nd]);      }maxx=max(maxx,tot-sz[o]);if(maxx<max1)max1=maxx,rt=o;}void dfs(int o,int fu,int dis,int ddss){q[++q[0].d].d=dis;q[q[0].d].ds=ddss;d[o]=dis;for(int i=xia[o];i!=-1;i=hou[i]){int nd=zhong[i];if(nd==fu||vis[nd])continue;dfs(nd,o,dis+v[i],ddss+1);}}bool cmp(lalala a,lalala b){return a.d<b.d;}void calc(int o,int fu){q[0].d=0;dfs(o,fu,0,0);  sort(q+1,q+1+q[0].d,cmp);   int l=1,r=q[0].d;   while(l<r)   {   if(q[l].d+q[r].d==k){ ans[q[l].ds+q[r].ds]++;  if(q[l+1].d+q[r].d==k)++l;else --r;   }       else if(q[l].d+q[r].d<k)l++;    else r--;   }}void calc2(int o,int fu){q[0].d=0;dfs(o,fu,d[fu]-d[o],1);  sort(q+1,q+1+q[0].d,cmp);   int l=1,r=q[0].d;   while(l<r)   {   if(q[l].d+q[r].d==k){ ans[q[l].ds+q[r].ds]--;  if(q[l+1].d+q[r].d==k)++l;else --r;   }       else if(q[l].d+q[r].d<k)l++;    else r--;   }}void work(int o,int fu){//cout<<"O";vis[o]=1; calc(o,fu);for(int i=xia[o];i!=-1;i=hou[i]){int nd=zhong[i];if(nd==o||vis[nd])continue;      calc2(nd,o);      tot=sz[nd];  max1=inf;  zzx(nd,o);  work(nd,o);}}int main(){memset(xia,-1,sizeof(xia));scanf("%d%d",&n,&k);for(i=1;i<n;i++){scanf("%d%d%d",&x,&y,&z);x++,y++;jian(x,y,z);}max1=inf;tot=n;zzx(1,0);work(rt,0);for(i=1;i<=n;i++){if(ans[i]>0){printf("%d",i);return 0;}}printf("-1");}


原创粉丝点击