青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 43,  comments - 9,  trackbacks - 0

題目給出一棵樹(N<=10000)以及所有邊的權(<=10000). 現在要求對任意查詢Q(<=10^8), 判斷是否存在一條邊權之和恰好為Q的路徑.
標程的方法暫時沒看懂= =... 
我用樹的分治做(更多相關內容見09國家集訓隊漆子超的論文)
考慮一棵以root為根的子樹, 那么在這棵子樹中, 有多少條 v1->root->v2 的路徑長恰好為Q呢? 可以先DFS一次子樹, 求出所有點到root的距離, 將這些距離排個序,  就能在klogk的時間里求出滿足和為Q的組合數count[root,Q]. 但是這樣把路徑重疊, 也就是v1->v'->root->v'->v2的情況也算進去了.  考慮不合法的狀態, 如果有邊重復, 那么其中肯定包含root到某個兒子的邊, 也就是形如v1->chi->root->chi->v2. 所以count[root,Q]中不合法路徑數為sigma(count[chi,Q-2*dist[root][chi]]), 求出來減去即可.
這樣處理完以root為根的樹后, 結點root已經沒有用了. 也就是說剩下的只須處理它的所有兒子樹,  轉化為新的獨立問題.
這樣不斷地處理樹, 將樹分成新子樹, 最后完成所有子樹的統計.

恰當選擇每次拆分的樹根可以使復雜度變成nlogn, 否則總復雜度仍然是n^2. 一個較方便的規則是: 選擇樹的平衡點, 也就是拿掉這個點后形成的森林里, max(|tree[i]|)最小.
這樣的點可以對樹DFS一次做DP求得. pku1655就是解決這個問題.

ps.pku1741與此題幾乎完全一樣, 唯一不同的是那題是求dist<=Q的路徑的數量.

代碼:

  1#include <iostream>
  2#include <algorithm>
  3using namespace std;
  4
  5//#define DEBUG
  6
  7const int MAX_V = 11000;
  8const int MAX_E = MAX_V*5;
  9
 10struct EDGE{
 11  int v,e,w;
 12}
edg[MAX_E];
 13int se, gg[MAX_V];
 14bool ok[MAX_E];
 15int vis[MAX_V], stamp;
 16int que[MAX_V*5], sque, pque;
 17int card[MAX_V], chm[MAX_V], sum[MAX_V], det[MAX_V];
 18int gdd[MAX_V],sdd;
 19int ans;
 20int N,L; 
 21
 22void addedge(int u, int v, int w)
 23{
 24  edg[se].v=v; edg[se].w=w; edg[se].e=gg[u]; gg[u]=se++;
 25  edg[se].v=u; edg[se].w=w; edg[se].e=gg[v]; gg[v]=se++;
 26}

 27
 28void dfsplus(int rt, int ss, int di, int &idx, int &cnt) 
 29{
 30  //求距離的同時找重心
 31  vis[rt]=stamp;
 32  chm[rt]=0, card[rt]=1;
 33  gdd[sdd++]=di;
 34  for(int j=gg[rt]; j>0; j=edg[j].e){
 35    if(ok[j])continue;
 36    int v=edg[j].v;
 37    if(vis[v]==stamp)continue;
 38    dfsplus(v, ss, di+edg[j].w, idx, cnt);
 39    card[rt]+=card[v];
 40    chm[rt]=max(chm[rt],card[v]);
 41  }

 42  chm[rt]=max(chm[rt],ss-card[rt]);
 43  if(chm[rt]<cnt)
 44    idx=rt, cnt=chm[rt];
 45}

 46
 47int matchdist(int d)
 48{
 49  int ret=0;
 50  sort(gdd,gdd+sdd);
 51  int q1=0, q2=sdd-1;
 52  //線性的掃描求組合數, 可惜前面的排序多了個logn
 53  while(q1<=q2){
 54    if(gdd[q1]+gdd[q2]<d)q1++;
 55    else if(gdd[q1]+gdd[q2]>d)q2--;
 56    else{
 57      if(gdd[q1]==gdd[q2]){
 58        ret+=(q2-q1)*(q2-q1+1)/2
 59        break;
 60      }

 61      else{
 62        int p1=q1+1, p2=q2-1;
 63        while(p1<sdd && gdd[p1]==gdd[q1]) p1++;
 64        while(p2>=0 && gdd[p2]==gdd[q2]) p2--;
 65        ret+=(p1-q1)*(q2-p2);
 66        q1=p1, q2=p2;
 67      }

 68    }

 69  }

 70  return ret;
 71}

 72
 73void solve()
 74{
 75  int i,j,k;  
 76  pque=sque=0;
 77  ans=0;
 78  stamp=0;
 79  memset(vis,0,sizeof(vis));
 80  det[1]=-1; sum[1]=N;
 81  que[sque++]=1;
 82  while(pque!=sque){
 83    int u=que[pque++];
 84    int idx=u, cnt=N+1;
 85    sdd=0;
 86    ++stamp;
 87    dfsplus(u, sum[u], 0, idx, cnt);
 88    if(det[u]>0 && L-det[u]*2>=0){
 89      //減去它父親的非法路徑數
 90      ans-=matchdist(L-det[u]*2);
 91    }

 92    u=idx;
 93    sdd=0;
 94    ++stamp;
 95    dfsplus(u, sum[u], 0, idx, cnt);
 96    //加上自己的總路徑數
 97    ans+=matchdist(L);
 98    for(j=gg[u]; j>0; j=edg[j].e){
 99      if(ok[j])continue;
100      int v=edg[j].v;
101      det[v]=edg[j].w;
102      ok[j^1]=true//切斷子樹和父親的邊
103      sum[v]=card[v];
104      que[sque++]=v;
105    }

106  }

107  if(ans>0) puts("AYE");
108  else puts("NAY");
109}

110
111int main()
112{
113  int i,j,k,u,v,w;
114  while(true){
115    scanf("%d",&N);
116    if(N==0)break;
117    se=2;
118    memset(gg,0,sizeof(gg));
119    for(u=1; u<=N; u++){
120      while(true){
121        scanf("%d",&v);
122        if(v==0)break;
123        scanf("%d",&w);
124        addedge(u,v,w);
125      }

126    }

127    while(true){
128      scanf("%d",&L);
129      if(L==0)break;
130      memset(ok,false,sizeof(ok));
131      solve();
132    }

133    printf(".\n");
134  }

135}

136
posted on 2009-07-31 14:30 wolf5x 閱讀(513) 評論(0)  編輯 收藏 引用 所屬分類: acm_icpc
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

"Do not spend all your time on training or studying - this way you will probably become very exhausted and unwilling to compete more. Whatever you do - have fun. Once you find programming is no fun anymore – drop it. Play soccer, find a girlfriend, study something not related to programming, just live a life - programming contests are only programming contests, and nothing more. Don't let them become your life - for your life is much more interesting and colorful." -- Petr

留言簿(3)

隨筆分類(59)

隨筆檔案(43)

cows

搜索

  •  

最新評論

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲美女色禁图| 久久久久久久精| 亚洲欧美精品在线| 欧美精品www| 在线成人国产| 久久午夜精品一区二区| 午夜亚洲激情| 国产一区二区三区av电影| 午夜精品久久久久久久99黑人| 最新中文字幕亚洲| 久久精品视频在线| 伊人狠狠色j香婷婷综合| 麻豆国产va免费精品高清在线| 久久超碰97中文字幕| 国产一区二区三区黄视频| 欧美亚洲一级片| 香蕉成人伊视频在线观看| 国产欧美一二三区| 久久久精品国产免费观看同学| 午夜欧美精品| 韩国v欧美v日本v亚洲v| 免费成人高清| 亚洲午夜三级在线| 国产精品视频xxx| 久久成人精品无人区| 午夜激情一区| 一区二区三区在线不卡| 欧美黄色成人网| 欧美激情欧美激情在线五月| 一区二区免费看| 亚洲一区尤物| 影音先锋国产精品| 亚洲欧洲精品成人久久奇米网| 欧美另类一区| 欧美一区二区日韩一区二区| 久久久久久国产精品一区| 最新国产成人av网站网址麻豆| 亚洲日本激情| 国产精品永久| 欧美激情精品久久久久久变态| 欧美激情二区三区| 欧美亚洲视频| 噜噜噜91成人网| 亚洲欧美日本精品| 久久久久久亚洲精品中文字幕 | 久久久蜜桃精品| 亚洲三级观看| 亚洲欧美国产一区二区三区| 在线欧美日韩国产| 亚洲免费av片| 精品成人一区二区三区| 日韩一区二区精品| 国模私拍视频一区| 夜夜嗨av一区二区三区中文字幕| 夜夜嗨av一区二区三区四区| 国产一区二区三区免费不卡| 亚洲日本va在线观看| 国产亚洲一级高清| 亚洲美女电影在线| 精品成人在线| 在线亚洲欧美视频| 最新高清无码专区| 欧美一区网站| 亚洲欧美清纯在线制服| 欧美国产视频日韩| 另类天堂av| 国产欧美一区二区视频| 日韩亚洲欧美在线观看| 亚洲国产天堂久久综合网| 午夜老司机精品| 亚洲在线日韩| 欧美日韩国产一区精品一区| 欧美岛国激情| 尤物九九久久国产精品的特点| 亚洲一级在线| 亚洲综合好骚| 国产精品a久久久久| 亚洲精品中文在线| aa国产精品| 欧美国产一区二区三区激情无套| 欧美成年人在线观看| 在线观看国产日韩| 久久视频这里只有精品| 久久久久在线观看| 国产日韩欧美一区在线| 亚洲一区二区三区乱码aⅴ| 亚洲一区二区三区乱码aⅴ| 欧美日韩国产成人高清视频| 亚洲精品之草原avav久久| 一本色道久久加勒比精品| 欧美精选一区| 一区二区三区蜜桃网| 亚洲欧美视频一区| 国产日产亚洲精品系列| 欧美在线日韩| 欧美成黄导航| 亚洲精品一区二区三区99| 欧美成人午夜77777| 亚洲国产成人不卡| 9l国产精品久久久久麻豆| 欧美日韩三级视频| 99精品欧美一区| 亚洲午夜影视影院在线观看| 欧美日韩在线高清| 亚洲一区二区三区色| 久久精品夜夜夜夜久久| 亚洲大片在线| 欧美精品激情blacked18| 一区二区精品在线| 久久av红桃一区二区小说| 国产中文一区| 欧美成人自拍视频| 一区二区三区免费网站| 久久精品国产77777蜜臀| 韩国精品在线观看| 欧美成人一区二区| 亚洲午夜高清视频| 久久亚洲精选| 99精品视频免费观看视频| 国产精品国产三级国产| 欧美在线观看一区二区三区| 亚洲第一天堂无码专区| 亚洲免费网站| 亚洲大胆人体在线| 国产精品免费在线| 美女黄色成人网| 夜夜爽av福利精品导航| 国产欧美一区二区精品性| 鲁大师影院一区二区三区| 一区二区日本视频| 欧美va亚洲va香蕉在线| 亚洲一区二区三区影院| 韩国精品久久久999| 欧美日韩在线视频首页| 久久精品亚洲一区二区| 99亚洲一区二区| 欧美a级一区二区| 欧美伊人久久| 亚洲婷婷综合久久一本伊一区| 狠狠色丁香久久婷婷综合丁香| 欧美理论电影在线播放| 久久久久国产一区二区三区| 亚洲图片激情小说| 亚洲精品久久久久久久久| 鲁大师影院一区二区三区| 亚洲男人的天堂在线| 亚洲国产精品999| 国产欧美在线看| 国产精品扒开腿爽爽爽视频| 免费成人黄色av| 久久本道综合色狠狠五月| 中文精品视频| 最新亚洲激情| 欧美高清你懂得| 老巨人导航500精品| 亚洲欧美日韩在线播放| 日韩一级不卡| 亚洲区欧美区| 永久免费精品影视网站| 国产喷白浆一区二区三区| 国产精品扒开腿做爽爽爽软件| 欧美大片在线影院| 久久久久中文| 久久狠狠亚洲综合| 久久国产色av| 欧美一区二区精品在线| 亚洲欧美国产毛片在线| 亚洲午夜电影网| 99精品视频免费观看视频| 亚洲激情成人在线| 亚洲欧洲一区二区天堂久久| 亚洲高清资源| 亚洲丁香婷深爱综合| 欧美黄色一区| 亚洲国产精品视频一区| 亚洲国产mv| 亚洲精品国产品国语在线app| 亚洲国产精品久久久久婷婷老年| 欧美激情国产日韩| 欧美华人在线视频| 91久久精品美女| 亚洲人人精品| 99国产精品久久久| 亚洲专区一区二区三区| 亚洲欧美日韩国产精品 | 欧美国产日韩视频| 欧美大片91| 欧美日韩成人在线观看| 欧美日一区二区在线观看| 欧美日韩国产探花| 国产精品久久毛片a| 国产日韩欧美一区二区三区在线观看| 国产亚洲亚洲| 亚洲精品久久久久久下一站| 一区二区三区欧美激情| 亚洲欧美日韩一区二区在线| 久久精品一区四区| 欧美高清视频在线| 99国产精品自拍| 亚久久调教视频|