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

posts - 43,  comments - 9,  trackbacks - 0

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

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

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

代碼:

  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  //線性的掃描求組合數(shù), 可惜前面的排序多了個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      //減去它父親的非法路徑數(shù)
 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    //加上自己的總路徑數(shù)
 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
<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

"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>
            久久在线91| 亚洲欧美日韩精品一区二区| 久久黄金**| 亚洲一区二区三区中文字幕| 亚洲日本中文字幕免费在线不卡| 美国十次了思思久久精品导航| 久久偷窥视频| 亚洲国产成人一区| 亚洲日本激情| 亚洲永久免费| 欧美一级欧美一级在线播放| 欧美中文字幕不卡| 久久伊人精品天天| 欧美日本亚洲视频| 国产欧美一区二区精品秋霞影院 | 一区二区激情小说| 一区二区三区四区五区在线| 亚洲女爱视频在线| 欧美777四色影视在线| 欧美成人精品福利| 国产精品福利久久久| 一区二区在线免费观看| 亚洲毛片一区| 欧美永久精品| 亚洲人成绝费网站色www| 亚洲一区二区三区四区在线观看| 久久精品国产精品亚洲综合| 免播放器亚洲一区| 国产视频欧美| 一区二区高清视频在线观看| 久久国产精品99国产精| 亚洲大片在线观看| 性欧美video另类hd性玩具| 欧美.日韩.国产.一区.二区| 国产精品蜜臀在线观看| 在线播放国产一区中文字幕剧情欧美 | 国产伦精品一区二区三区照片91 | 亚洲欧美日韩系列| 欧美激情视频网站| 欧美一区二区三区在线免费观看| 欧美二区在线播放| 国产精品99久久久久久久久久久久 | 欧美一区二区三区四区夜夜大片| 美女精品一区| 亚洲欧美久久| 国产精品久久久久国产a级| 亚洲精品在线一区二区| 久久影音先锋| 欧美一二三区精品| 国产视频久久久久| 欧美一区二区日韩一区二区| 99精品国产热久久91蜜凸| 老司机午夜免费精品视频| 精品成人一区二区| 免费久久99精品国产| 欧美在线999| 国产视频在线观看一区二区三区| 制服丝袜亚洲播放| 一本大道av伊人久久综合| 欧美激情一区二区在线| 日韩天堂在线视频| 亚洲国产视频一区| 欧美国产综合视频| 日韩亚洲一区二区| 9久re热视频在线精品| 欧美日韩亚洲一区| 亚洲午夜精品久久久久久app| 亚洲日韩视频| 欧美日韩另类在线| 亚洲一区日本| 亚洲一区三区电影在线观看| 国产欧美日韩亚洲精品| 久久免费国产精品1| 蜜乳av另类精品一区二区| 亚洲伦伦在线| 在线亚洲成人| 国产精品日韩专区| 久久伊人精品天天| 欧美激情精品久久久久久| 亚洲视频在线视频| 性娇小13――14欧美| 国语精品一区| 亚洲第一视频网站| 欧美日本不卡高清| 久久激情久久| 欧美高清在线视频观看不卡| 亚洲最新视频在线| 欧美一区免费视频| 亚洲日韩成人| 亚洲女性裸体视频| 91久久国产综合久久| 夜夜精品视频一区二区| 极品尤物久久久av免费看| 亚洲精品久久久久| 韩国亚洲精品| 最近中文字幕日韩精品| 国产精品久久久久国产精品日日| 久久久久成人精品| 欧美日韩综合久久| 久久久999精品| 男女精品视频| 欧美视频一区二区在线观看| 欧美在线视频免费| 欧美精品日韩三级| 你懂的网址国产 欧美| 欧美精品一区二区三区蜜臀| 欧美在线一二三四区| 欧美国产日韩一区二区三区| 亚洲欧美激情一区| 鲁大师影院一区二区三区| 午夜精品亚洲| 欧美剧在线免费观看网站| 久久精品国产精品 | 久久精品亚洲乱码伦伦中文 | 亚洲精品黄网在线观看| 午夜精品剧场| 亚洲一区在线播放| 欧美激情va永久在线播放| 巨乳诱惑日韩免费av| 国产九九精品| 99国产精品久久久| 日韩一本二本av| 欧美**人妖| 欧美激情精品久久久久久久变态 | 欧美偷拍另类| 亚洲国产导航| 激情综合色综合久久| 午夜视黄欧洲亚洲| 亚洲一区制服诱惑| 欧美精品久久久久a| 亚洲福利国产精品| 亚洲激情黄色| 猫咪成人在线观看| 欧美~级网站不卡| 在线欧美小视频| 久久亚洲电影| 欧美1区2区3区| 亚洲二区精品| 欧美 日韩 国产 一区| 欧美韩日亚洲| 亚洲精品乱码久久久久久蜜桃91| 久久久综合视频| 亚洲电影天堂av| 亚洲日本视频| 欧美精品三区| 亚洲少妇自拍| 午夜精品视频一区| 国产一区二区三区电影在线观看| 亚洲在线免费| 久久久久9999亚洲精品| 韩国福利一区| 农村妇女精品| 一区二区三区色| 久久黄色级2电影| 亚洲国产美女| 欧美色欧美亚洲另类二区| 亚洲欧美卡通另类91av| 久久性天堂网| 99视频精品全部免费在线| 欧美日韩一级黄| 欧美一区二区在线| 欧美风情在线观看| 亚洲一区美女视频在线观看免费| 欧美亚洲免费电影| 噜噜噜躁狠狠躁狠狠精品视频| 精品成人在线视频| 欧美成人综合| 亚洲欧美日韩综合一区| 欧美福利在线| 久久av一区二区三区漫画| 伊人精品久久久久7777| 欧美精品18| 久久精品国产视频| 亚洲日本成人| 老色鬼久久亚洲一区二区| 一本一本a久久| 精品999成人| 欧美午夜剧场| 久热精品在线视频| 亚洲一区网站| 亚洲激情网址| 久久婷婷国产综合尤物精品 | 久久视频一区二区| 中日韩美女免费视频网站在线观看| 国产日韩在线看| 欧美三级日韩三级国产三级| 久久久久综合网| 亚洲午夜影视影院在线观看| 欧美成人一区在线| 久久久久.com| 欧美一区2区三区4区公司二百| 伊人一区二区三区久久精品| 国产精品vip| 欧美理论电影网| 女人香蕉久久**毛片精品| 久久精品国产久精国产爱| 亚洲免费观看高清完整版在线观看| 另类天堂视频在线观看| 久久精品女人| 久久riav二区三区|