<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      luogu 4886

      點分治好題

      統計距離正常點分治統計即可,我們只需考慮何時達到最優

      有兩種情況:

      第一:代價最大的詢問兩個端點在不同的兩個子樹中

      因為這種情況下,無論根向那個子樹移動都會等價地增加到達另一個端點的代價,因此此時總代價已經達到最小

      第二:代價最大的詢問有多組,且這些點不在同一棵子樹中

      同情況一,如果我們把根偏向其中某一棵子樹移動的話,那么一定會等價地增大另一端的代價,因此總代價已經達到最小

      這樣的話直接統計就好了

      貼代碼:

      #include <cstdio>
      #include <cmath>
      #include <cstring>
      #include <cstdlib>
      #include <iostream>
      #include <algorithm>
      #include <queue>
      #include <stack>
      using namespace std;
      struct Edge
      {
          int nxt;
          int to;
          int val;
      }edge[200005];
      int q[100005][2];
      int siz[100005];
      int rt,s;
      int head[100005];
      int maxp[100005];
      int ans=0x3f3f3f3f;
      bool vis[100005];
      int dis[100005];
      int bel[100005];
      int ccl[100005];
      int col=0,typ=0;
      int cnt=1,maxx=0;
      int n,m;
      void add(int l,int r,int w)
      {
          edge[cnt].nxt=head[l];
          edge[cnt].to=r;
          edge[cnt].val=w;
          head[l]=cnt++;
      }
      void get_rt(int x,int fx)
      {
          siz[x]=1,maxp[x]=0;
          for(int i=head[x];i;i=edge[i].nxt)
          {
              int to=edge[i].to;
              if(to==fx||vis[to])continue;
              get_rt(to,x);
              siz[x]+=siz[to];
              maxp[x]=max(maxp[x],siz[to]);
          }
          maxp[x]=max(maxp[x],s-siz[x]);
          if(maxp[x]<maxp[rt])rt=x;
      }
      void dfs(int x,int fx,int dep)
      {
          dis[x]=dep;
          if(!fx)bel[x]=0;
          for(int i=head[x];i;i=edge[i].nxt)
          {
              int to=edge[i].to;
              if(to==fx)continue;
              if(!fx)col++;
              bel[to]=col;
              dfs(to,x,dep+edge[i].val);
          }
      }
      int calc(int x)
      {
          dis[x]=maxx=0,dfs(x,0,0);
          typ++;
          for(int i=1;i<=m;i++)
          {
              ccl[i]=0;
              if(dis[q[i][0]]+dis[q[i][1]]>maxx)maxx=dis[q[i][0]]+dis[q[i][1]],ccl[i]=++typ;
              else if(dis[q[i][0]]+dis[q[i][1]]==maxx)ccl[i]=typ;
          }
          return typ; 
      }
      void solve(int x)
      {
          vis[x]=1;
          int k=calc(x);
          int ori=0;
          for(int i=1;i<=m;i++)
          {
              if((bel[q[i][0]]!=bel[q[i][1]])&&ccl[i]==k){ori=-1;break;}
              else if(ccl[i]==k&&!ori)ori=bel[q[i][0]];
              else if(ccl[i]==k)if(bel[q[i][0]]!=ori){ori=-1;break;}
          }
          ans=min(ans,maxx);
          for(int i=head[x];i;i=edge[i].nxt)
          {
              int to=edge[i].to;
              if(vis[to])continue;
              if(bel[to]==ori)rt=0,s=siz[to],get_rt(to,x),solve(rt);
          }
      }
      inline int read()
      {
          int f=1,x=0;char ch=getchar();
          while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
          while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
          return x*f;
      }
      int main()
      {
          n=read(),m=read();
          for(int i=1;i<n;i++)
          {
              int x=read(),y=read(),z=read();
              add(x,y,z),add(y,x,z);
          }
          maxp[0]=0x3f3f3f3f;
          for(int i=1;i<=m;i++)q[i][0]=read(),q[i][1]=read();
          rt=0,s=n,get_rt(1,0),solve(rt);
          printf("%d\n",ans);
          return 0;
      }

       

      posted @ 2019-07-08 21:39  lleozhang  Views(203)  Comments(0)    收藏  舉報
      levels of contents
      主站蜘蛛池模板: 人妻va精品va欧美va| 肥臀浪妇太爽了快点再快点| 亚洲a免费| 四虎在线播放亚洲成人| 美女午夜福利视频一区二区| 麻豆一区二区三区香蕉视频| 日韩高清视频 一区二区| 亚洲精品综合网二三区| 国产精品国产高清国产一区| 国产成人精品18| 潘金莲高清dvd碟片| 国产蜜臀久久av一区二区| 亚洲第一福利网站在线观看 | 性奴sm虐辱暴力视频网站| 国产免费无遮挡吸奶头视频| 亚洲综合精品成人| 亚洲AV成人片不卡无码| 麻豆久久天天躁夜夜狠狠躁| 无码专区 人妻系列 在线| 日本无遮挡吸乳视频| 国产老熟女视频一区二区| 浦东新区| 国产一区二区三区高清视频| 亚洲中文字幕精品久久久久久动漫 | 激情国产一区二区三区四区| 久久精品国产一区二区三区| 在线国产精品中文字幕| 在线看片免费不卡人成视频| 亚洲欧美在线一区中文字幕| 日韩av一区二区三区不卡| 亚洲国产欧美一区二区好看电影| 无码尹人久久相蕉无码| 国产亚洲精品第一综合麻豆| 久久综合开心激情五月天| 亚洲最大福利视频网| 久久精品国产亚洲av高| 日韩幕无线码一区中文| 长汀县| 无码国产精品一区二区av| 亚洲综合一区二区精品导航 | 日本一区二区国产在线|