• <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>
            心如止水
            Je n'ai pas le temps
            posts - 400,comments - 130,trackbacks - 0

            題目的意思就是求圖的中心,即到最遠(yuǎn)結(jié)點(diǎn)的距離最近。

            具體做法為:建立一棵樹(shù);求出每個(gè)結(jié)點(diǎn)向下的最大深度和次大深度,其中定義最大深度路徑和次大深度路徑?jīng)]有公共邊,之所以要求次大深度,是為了在下一步,當(dāng)求結(jié)點(diǎn)i向上的最長(zhǎng)路徑時(shí),避免father[i]向下的路徑不經(jīng)過(guò)i結(jié)點(diǎn);求出每個(gè)結(jié)點(diǎn)向上的最長(zhǎng)路徑;取向下和向上中較大的一個(gè)。

             

             

            以下是我的代碼:

            #include<stdio.h>
            #include
            <stdlib.h>
            typedef 
            struct NODE
            {
                
            long son;
                
            struct NODE *next;
            }
            SON;
            long n;
            long father[10001];
            SON 
            *son[10001];
            long down[10001][2]={0},up[10001]={0};
            void insert(SON *link,long x)
            {//------將第x個(gè)結(jié)點(diǎn)設(shè)為*link的兒子 
                SON *p;
                p
            =(SON*)malloc(sizeof(SON));
                p
            ->son=x;
                p
            ->next=link->next;
                link
            ->next=p;
            }

            void init()
            {
                FILE 
            *fin=fopen("net.in","r");
                
            long i,w;
                fscanf(fin,
            "%ld",&n);
                
            for(i=1;i<=n;i++)
                
            {
                   son[i]
            =(SON*)malloc(sizeof(SON));
                   son[i]
            ->son=0;
                   son[i]
            ->next=NULL;
                }

                
            for(i=2;i<=n;i++)
                
            {
                   fscanf(fin,
            "%ld",&w);
                   insert(son[w],i);
                   father[i]
            =w;
                }

                fclose(fin);
            }

            void dp1(long k)
            {
                SON 
            *p;
                
            long i;
                p
            =son[k]->next;
                
            while(p!=NULL)
                
            {
                   i
            =p->son;
                   dp1(i);
                   
            if(down[i][0]+1>down[k][0])
                   
            {
                      down[k][
            1]=down[k][0];
                      down[k][
            0]=down[i][0]+1;
                   }

                   
            else
                   
            {
                      
            if(down[i][0]+1>down[k][1])
                        down[k][
            1]=down[i][0];
                   }

                   p
            =p->next;
                }

            }

            void dp2(long k)
            {
                SON 
            *p;
                
            long t;
                
            if(k>=2)
                
            {
                   up[k]
            =up[father[k]]+1;
                   
            if(down[father[k]][0]==down[k][0]+1)
                     t
            =down[father[k]][1]+1;
                   
            else t=down[father[k]][0]+1;
                   
            if(t>up[k])
                     up[k]
            =t;
                }

                p
            =son[k]->next;
                
            while(p!=NULL)
                
            {
                   dp2(p
            ->son);
                   p
            =p->next;
                }

            }

            void write()
            {
                FILE 
            *fout=fopen("net.out","w");
                
            long i,t,min=2000000000;
                
            for(i=1;i<=n;i++)
                
            {
                   
            if(up[i]<down[i][0])
                     t
            =down[i][0];
                   
            else t=up[i];
                   
            if(t<min)
                     min
            =t;
                }

                
            for(i=1;i<=n;i++)
                
            {
                   
            if(up[i]<down[i][0])
                     t
            =down[i][0];
                   
            else t=up[i];
                   
            if(t==min)
                     fprintf(fout,
            "%ld ",i);
                }

                fprintf(fout,
            "\n");
                fclose(fout);
            }

            int main()
            {
                init();
                dp1(
            1);
                dp2(
            1);
                write();
            return 0;
            }

            posted on 2010-01-06 19:27 lee1r 閱讀(238) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 題目分類:動(dòng)態(tài)規(guī)劃
            亚洲国产精品无码久久久秋霞2 | 人妻无码中文久久久久专区| 久久久久国产精品麻豆AR影院 | 四虎国产精品成人免费久久| 偷窥少妇久久久久久久久| 国内精品伊人久久久久妇| 久久久无码精品亚洲日韩按摩 | 久久精品国产清自在天天线 | 青青草国产精品久久久久| 国产精品免费久久久久电影网| 偷窥少妇久久久久久久久| 麻豆AV一区二区三区久久 | 无码国产69精品久久久久网站| 久久本道伊人久久| 久久久久久一区国产精品| 亚洲愉拍99热成人精品热久久| 无码人妻少妇久久中文字幕| 久久丫精品国产亚洲av不卡| 久久久久18| 国产99久久久国产精品~~牛| 看久久久久久a级毛片| 久久精品国产亚洲5555| 国产精品免费福利久久| 久久只这里是精品66| 青青热久久国产久精品 | 伊人伊成久久人综合网777| 国产日产久久高清欧美一区| 综合网日日天干夜夜久久| 久久精品中文字幕有码| 欧美亚洲国产精品久久蜜芽 | 伊人热热久久原色播放www| 久久亚洲国产成人影院网站| 久久最近最新中文字幕大全 | 国内精品人妻无码久久久影院导航| 色综合久久综精品| 国产精品激情综合久久| 精品久久一区二区| 93精91精品国产综合久久香蕉| 国产精品美女久久久久av爽| 国产69精品久久久久99| 久久精品亚洲福利|