• <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>

            The 36th ACM/ICPC Asia Regional Dalian Online Contest 大連2011ICPC網(wǎng)絡(luò)賽 個(gè)人題解

            好久不寫題,外加上在準(zhǔn)備考研,這次有點(diǎn)悲劇,比賽時(shí)A了5題,還有一題有點(diǎn)小BUG,比賽后才A。。今年要考南京大學(xué)~也沒時(shí)間準(zhǔn)備ICPC了,希望我們隊(duì)里的那個(gè)小孩子能夠快快成長起來,我這個(gè)隊(duì)長也可以安心的卸任了,明年將最后一次比賽機(jī)會(huì)放在NJU吧~恩,順便去看下高中膜拜過的蔣炎研同學(xué)~江蘇大學(xué)加油!
            第一題:
            其實(shí)就是構(gòu)建一個(gè)DAG,然后再DAG上求最長路徑。要注意構(gòu)圖時(shí)候避免環(huán),特別考慮當(dāng)兩個(gè)木塊長寬都一致而且都是d=0類型的時(shí)候。對了,還有一個(gè)陰險(xiǎn)的地方,長寬可以互換的~復(fù)雜度O(n2)
             1# include <cstdio>
             2# include <cstring>
             3# include <algorithm>
             4using namespace std;
             5int n;
             6# define N 1005
             7# define M 1000005
             8int data[N][4];
             9int g[N],nxt[M],v[M],val[M],c;
            10long long len[N];
            11long long dp(int pos)
            12{
            13    if(len[pos]!=-1return len[pos];
            14    else
            15    {
            16        len[pos]=0;
            17        for(int p=g[pos];p!=-1;p=nxt[p])
            18            len[pos]=max(len[pos],dp(v[p])+val[p]);
            19        return len[pos];
            20    }

            21}

            22void insert(int s,int e,int value)
            23{
            24    v[c]=e;
            25    val[c]=value;
            26    nxt[c]=g[s];
            27    g[s]=c++;
            28}

            29int main()
            30{
            31    while(scanf("%d",&n)&&n)
            32    {
            33        for(int i=0;i<n;i++)
            34        {
            35            scanf("%d%d%d%d",&data[i][0],&data[i][1],&data[i][2],&data[i][3]);
            36            if(data[i][0]>data[i][1]) swap(data[i][0],data[i][1]);
            37        }

            38        memset(g,-1,sizeof(g));
            39        memset(len,-1,sizeof(len));
            40        c=0;
            41        for(int i=0;i<n;i++)
            42            for(int j=0;j<n;j++)
            43                switch(data[i][3])
            44                {
            45                case 0:
            46                    if(data[j][0]<=data[i][0]&&data[j][1]<=data[i][1]&&!(data[j][0]==data[i][0]&&data[j][1]==data[i][1]&&data[j][3]==data[i][3]&&j>=i))
            47                        insert(i,j,data[j][2]);
            48                    break;
            49                case 1:
            50                    if(data[j][0]<=data[i][0]&&data[j][1]<=data[i][1]&&((long long)data[j][0]*data[j][1])<((long long)data[i][0]*data[i][1]))
            51                        insert(i,j,data[j][2]);
            52                    break;
            53                case 2:
            54                    if(data[j][0]<data[i][0]&&data[j][1]<data[i][1])
            55                        insert(i,j,data[j][2]);
            56                    break;
            57                }
            ;
            58        for(int i=0;i<n;i++)
            59            insert(n,i,data[i][2]);
            60        printf("%I64d\n",dp(n));
            61    }

            62    return 0;
            63}


            第二題:一個(gè)數(shù)論題目,當(dāng)時(shí)沒有證明,直接找規(guī)律的,具體的就是質(zhì)數(shù)連成。恩。代碼是隊(duì)里的大一的孩子寫的,就直接貼了。復(fù)雜度打好表的畫就是個(gè)二分查找的復(fù)雜度
            1#include<cstdio>
            2#include<cmath>
            3#include<cstdlib>
            4#include<cstring>
            5
            6using namespace std;
            7
            8const int tablesize=64;
            9const int primesize=2000;
            10bool isprime[primesize+1];
            11int pt[primesize];
            12int mytable[tablesize+1][150];
            13inline void multiple(int* a,int b);
            14void getprime(int n);
            15void getmytable(int tablesize);
            16void getdata_and_solve();
            17void find_the_ans(char* ts);
            18void zhuanhuan(int* a,char* ts);
            19int dayu(int* a,int* b);
            20
            21int main()
            22{
            23 getprime(primesize);
            24 getmytable(tablesize);
            25 getdata_and_solve();
            26 return 0;
            27}

            28
            29inline void multiple(int* a,int b)
            30{
            31 int len=a[0];
            32 int i;
            33 a[1]*=b;
            34 for (i=2;i<=len;++i)
            35 {
            36 a[i]=a[i]*b+a[i-1]/10;
            37 a[i-1]%=10;
            38 }

            39 while (a[len]>9) {++len; a[len]=a[len-1]/10; a[len-1]%=10;}
            40 a[0]=len;
            41}

            42
            43void getprime(int n)
            44{
            45 int i;
            46 for (i=1;i<=n;++i) isprime[i]=true;
            47 isprime[1]=false;
            48 int j;
            49 i=1;
            50 while (++i<=n)
            51 if (isprime[i])
            52 {
            53 j=i;
            54 while ((j+=i)<=n)
            55 isprime[j]=false;
            56 }

            57 pt[0]=0;
            58 for (i=1;i<=n;++i)
            59 if (isprime[i]) pt[++pt[0]]=i;
            60}

            61
            62void getmytable(int tablesize)
            63{
            64 int j,i,len;
            65 mytable[1][0]=1; mytable[1][1]=2;
            66 for (i=2;i<=tablesize;++i)
            67 {
            68 len=mytable[i-1][0];
            69 for (j=0;j<=len;++j)
            70 mytable[i][j]=mytable[i-1][j];
            71 multiple(mytable[i],pt[i]);
            72 }

            73}

            74
            75void getdata_and_solve()
            76{
            77 char ts[200];
            78 int n;
            79 scanf("%d",&n);
            80 getchar();
            81 int i;
            82 for (i=1;i<=n;++i)
            83 {
            84 gets(ts);
            85 find_the_ans(ts);
            86 }

            87}

            88
            89void find_the_ans(char* ts)
            90{
            91 int l=1,r=tablesize;
            92 int mid;
            93 int shuju[150];
            94 zhuanhuan(shuju,ts);
            95 int lena,lenb=shuju[0];
            96 int flag;
            97 int i;
            98 while (l+1<r)
            99 {
            100 mid=((l+r)>>1);
            101 lena=mytable[mid][0];
            102 if (lena>lenb) flag=1; //a>b;
            103 else
            104 if (lena<lenb) flag=-1; //a<b;
            105 else
            106 {
            107 flag=0;
            108 for (i=lena;i>=1;--i)
            109 {
            110 if (mytable[mid][i]>shuju[i]) {flag=1; break;}
            111 else if (mytable[mid][i]<shuju[i]) {flag=-1; break;}
            112 }

            113 }

            114
            115 if (flag==0) {l=mid; break;}
            116 else if(flag==1) r=mid;
            117 else l=mid;
            118 }

            119
            120 for (i=mytable[l][0];i>=1;--i) printf("%d",mytable[l][i]);
            121 putchar('\n');
            122}

            123
            124 void zhuanhuan(int* a,char* ts)
            125{
            126 int len=strlen(ts);
            127 int i;
            128 for (i=0;i<len;++i)
            129 a[len-i]=ts[i]-'0';
            130 a[0]=len;
            131}

            132

            1003 是個(gè)TREE-DP,好久不動(dòng)了,不敢寫。。等會(huì)來實(shí)現(xiàn)下
            1004 一個(gè)二分+驗(yàn)證的問題。先二分最長長度,然后用BFS驗(yàn)證。其實(shí)都不用BFS,因?yàn)槭莻€(gè)嚴(yán)格單調(diào)的序列,直接DFS更簡單
            1# include <cstdio>
            2# include <algorithm>
            3# include <queue>
            4using namespace std;
            5int n,m,l;
            6# define N 500005
            7int d[N],dis[N];
            8queue<int> q;
            9bool chk(int len)
            10{
            11 if(len>=l) return true;
            12 while(!q.empty()) q.pop();
            13 int pos=upper_bound(d,d+n,len)-d-1;
            14 if(pos<0) return false;
            15 dis[pos]=1;
            16 if(m<=dis[pos]) return false;
            17 q.push(pos);
            18 while(!q.empty())
            19 {
            20 int top=q.front();
            21 q.pop();
            22 if(d[top]+len>=l) return true;
            23 pos=upper_bound(d,d+n,d[top]+len)-d-1;
            24 if(pos<0||d[pos]<=d[top]||dis[top]+1>=m) return false;
            25 dis[pos]=dis[top]+1;
            26 q.push(pos);
            27 }

            28 return false;
            29}

            30int main()
            31{
            32 while(scanf("%d%d%d",&l,&n,&m)!=EOF)
            33 {
            34 for(int i=0;i<n;i++)
            35 scanf("%d",d+i);
            36 sort(d,d+n);
            37 int s=0,e=l;
            38 while(s<=e)
            39 {
            40 int mid=(s+e)/2;
            41 if(chk(mid)) e=mid-1;
            42 else s=mid+1;
            43 }

            44 printf("%d\n",e+1);
            45 }

            46 return 0;
            47}

            1005 木有思想
            1006這題NC了,當(dāng)時(shí)想都沒想直接手寫樹狀數(shù)組+二分,現(xiàn)在想想看這題條件太特殊了,詢問的位置是一定的,就是一個(gè)簡單的最小堆= =。。。不過還是把樹狀數(shù)組的NC版本代碼貼出來吧。。
            Title
            1# include <cstdio>
            2# include <cstring>
            3# include <vector>
            4# include <utility>
            5# include <functional>
            6# include <algorithm>
            7using namespace std;
            8# define N 1000005
            9int arr[N],maxnum;
            10# define lowbit(num) ((num)&-(num))
            11pair<bool,int> q[N];
            12vector<int> list;
            13void add(int val)
            14{
            15 for(;val<=maxnum;val+=lowbit(val))
            16 arr[val]++;
            17}

            18int sum(int pos)
            19{
            20 int res=0;
            21 for(;pos>0;pos-=lowbit(pos))
            22 res+=arr[pos];
            23 return res;
            24}

            25int search(int m)
            26{
            27 int s=1,e=maxnum,total=sum(maxnum);
            28 while(s<=e)
            29 {
            30 int mid=(s+e)/2;
            31 if(total-sum(mid-1)>=m) s=mid+1;
            32 else e=mid-1;
            33 }

            34 return s-1;
            35}

            36int main()
            37{
            38 int n,m;
            39 while(scanf("%d%d",&n,&m)!=EOF)
            40 {
            41 list.clear();
            42 memset(arr,0,sizeof(arr));
            43 for(int i=0;i<n;i++)
            44 {
            45 char type[5];
            46 scanf("%s",type);
            47 if(type[0]=='I')
            48 {
            49 q[i].first=true;
            50 scanf("%d",&q[i].second);
            51 list.push_back(q[i].second);
            52 }

            53 else q[i].first=false;
            54 }

            55 sort(list.begin(),list.end());
            56 maxnum=list.size();
            57 for(int i=0;i<n;i++)
            58 {
            59 if(q[i].first)
            60 add(lower_bound(list.begin(),list.end(),q[i].second)-list.begin()+1);
            61 else
            62 printf("%d\n",list[search(m)-1]);
            63 }

            64 }

            65 return 0;
            66}

            1007 一個(gè)經(jīng)典的動(dòng)態(tài)統(tǒng)計(jì),我寫這類題目時(shí)都會(huì)很偷懶的用STL的set,呵呵~
            Title
            1# include <cstdio>
            2# include <algorithm>
            3# include <utility>
            4# include <functional>
            5# include <map>
            6using namespace std;
            7int n,r;
            8# define N 1005
            9pair<int,int> data[N];
            10map<int,int> refer;
            11bool cmpy(const pair<int,int> &a,const pair<int,int> &b)
            12{
            13 return a.second<b.second;
            14}

            15void cal(int &maxnum)
            16{
            17 if(refer.empty()) return;
            18 int total=0;
            19 map<int,int>::iterator last=refer.begin();
            20 for(map<int,int>::iterator i=refer.begin();i!=refer.end();i++)
            21 {
            22 while(i->first-last->first>r)
            23 total-=last->second,last++;
            24 total+=i->second;
            25 maxnum=max(maxnum,total);
            26 }

            27}

            28int main()
            29{
            30 while(scanf("%d%d",&n,&r)!=EOF)
            31 {
            32 for(int i=0;i<n;i++)
            33 scanf("%d%d",&data[i].first,&data[i].second);
            34 sort(data,data+n,cmpy);
            35 int last=0;
            36 refer.clear();
            37 int maxnum=0;
            38 for(int now=0;now<n;now++)
            39 {
            40 while(data[now].second-data[last].second>r)
            41 {
            42 refer[data[last].first]--;
            43 if(refer[data[last].first]==0) refer.erase(data[last].first);
            44 last++;
            45 }

            46 refer[data[now].first]++;
            47 cal(maxnum);
            48 }

            49 printf("%d\n",maxnum);
            50 }

            51 return 0;
            52}

            53
            1008 比賽時(shí)間來不及了,當(dāng)時(shí),以為寫出5題,能夠穩(wěn)了,yzu的同學(xué)來了個(gè)電話,說這次比賽5題已經(jīng)排到150了。。大驚。。連忙回去看題。。但是。。哎。。
            不扯淡了,寫寫這題思想。看復(fù)雜度,非O(n)的算法不行的說
            差不多定下來是TREE-DP
            首先構(gòu)造以1為根的樹
            然后主要解決3個(gè)問題
            1、判斷詢問時(shí)X節(jié)點(diǎn)是再Y節(jié)點(diǎn)的子孫節(jié)點(diǎn)還是其祖先節(jié)點(diǎn)(相對于以1為根的樹)
            2、分別討論以上兩種情況下的解
            第一問我是這樣解決的
            首先記錄下以1為根的樹的dfn(DFS遍歷序列),如果X是Y的子孫節(jié)點(diǎn)當(dāng)且僅當(dāng)dfn(x)>=dfn(y)且dfn(x)<=max(dfn(z)),z是y的子孫節(jié)點(diǎn)。這里要tree-dp處理max(dfn(z))。
            第二問的解決就很銷魂了
            首先,如果X是Y的祖先節(jié)點(diǎn),那么問題就轉(zhuǎn)化為求以Y為根的子樹的問題,可以直接利用以1為根的樹的DP出來的結(jié)果。(即以K為根的子樹兒子編號的最小值以及子孫編號的最小值以及次小值(這個(gè)后面會(huì)說有什么用),這個(gè)TREE-DP大家肯定都會(huì)的)
            X是Y的兒子節(jié)點(diǎn)
            這個(gè)麻煩一點(diǎn),首先利用DFN可以很快的確定根在Y的哪棵子樹上,如果最小值取在這棵子樹上,那么取Y的次小值,否則就取最小值。然后如果Y節(jié)點(diǎn)不是1號節(jié)點(diǎn)的話,其最小兒子(相對于以Y為根的子樹)編號再與其父親(相對于以1為根的子樹)取個(gè)最小值,最小子孫(相對于以Y為根的子樹)編號與1取最小值。
            然后上代碼~
             1# include <cstdio>
             2# include <vector>
             3# include <algorithm>
             4# define max(a,b) ((a)>(b)?(a):(b))
             5using namespace std;
             6# define N 100005
             7vector<int>    g[N];
             8int dfn[N],c=0,maxdfn[N];
             9int n,q;
            10int dp[N],fa[N];
            11int ans[N][5];
            12void update(int tmp[],int pos)
            13{
            14    if(pos<tmp[0]) tmp[1]=tmp[0],tmp[0]=pos;
            15    else if(pos<tmp[1]) tmp[1]=pos;
            16    if(dp[pos]<tmp[2]) tmp[3]=tmp[2],tmp[2]=dp[pos],tmp[4]=pos;
            17    else if(dp[pos]<tmp[3]) tmp[3]=dp[pos];
            18}

            19void dfs(int pos,int pre)
            20{
            21    dp[pos]=pos;
            22    maxdfn[pos]=dfn[pos]=c++;
            23    ans[pos][0]=ans[pos][1]=ans[pos][2]=ans[pos][3]=0xfffffff;
            24    for(int i=0;i<g[pos].size();i++)
            25    if(g[pos][i]!=pre)
            26        {
            27            dfs(g[pos][i],pos);
            28            if(dp[g[pos][i]]<dp[pos])
            29                dp[pos]=dp[g[pos][i]];
            30            maxdfn[pos]=max(maxdfn[pos],maxdfn[g[pos][i]]);
            31            update(ans[pos],g[pos][i]);
            32        }

            33    
            34    fa[pos]=pre;
            35}

            36int main()
            37{
            38    int t;
            39    scanf("%d",&t);
            40    while(t--)
            41    {
            42        scanf("%d%d",&n,&q);
            43        for(int i=1;i<=n;i++) g[i].clear();
            44        for(int i=1;i<n;i++)
            45        {
            46            int a,b;
            47            scanf("%d%d",&a,&b);
            48            g[a].push_back(b);
            49            g[b].push_back(a);
            50        }

            51        c=0;
            52        dfs(1,1);
            53
            54        while(q--)
            55        {
            56            int x,y;
            57            scanf("%d%d",&x,&y);
            58            if(dfn[x]<dfn[y]||dfn[x]>maxdfn[y])//根在上方
            59            {
            60                int ans1=ans[y][0],ans2=ans[y][2];
            61                if(ans1==0xfffffff) printf("no answers!\n");
            62                else printf("%d %d\n",ans1,ans2);
            63            }

            64            else//根在子樹中
            65            {
            66                int ans1=(dfn[x]>=dfn[ans[y][0]]&&dfn[x]<=maxdfn[ans[y][0]]?ans[y][1]:ans[y][0]),
            67                    ans2=(dfn[x]>=dfn[ans[y][4]]&&dfn[x]<=maxdfn[ans[y][4]]?ans[y][3]:ans[y][2]);
            68                if(y!=1) ans1=min(ans1,fa[y]),ans2=min(ans2,1);
            69                if(ans1==0xfffffff) printf("no answers!\n");
            70                else printf("%d %d\n",ans1,ans2);
            71            }

            72        }

            73        printf("\n");
            74    }

            75    return 0;
            76}
            1009 當(dāng)時(shí)沒來得及看,小朋友太純真的說費(fèi)用流,我就無語了。。不過這事都是給了我啟發(fā)。。不會(huì)想到有向圖的最小生成樹的時(shí)候太遲了。。
            1010 不知道

            最后再次祝福ujs Genius_Cats 在解體前能夠有個(gè)好成績~
            Genius Cats 隊(duì)長:yzhw

            posted on 2011-09-04 10:42 yzhw 閱讀(1862) 評論(6)  編輯 收藏 引用 所屬分類: DPgraph

            評論

            # re: The 36th ACM/ICPC Asia Regional Dalian Online Contest 大連2011ICPC網(wǎng)絡(luò)賽 個(gè)人題解 2011-09-04 19:08 PWK

            補(bǔ)上1005題目思路,在這題的思路是對點(diǎn)進(jìn)行割邊的縮點(diǎn)從構(gòu)圖,如果2點(diǎn)2連通,那么他們連通的邊是不能破壞的。能破壞的只有割邊。由void DFS(int x,int farther) ,void Set_Color(int x)完成。完成后成為一棵樹。之后就是博弈問題啦,做完敵人,他們要找到一條鏈,使得能盡量多的刪除最小的邊。不能刪除的最小邊權(quán)值則是這題的解。刪除最小的邊的方法是以最小邊的兩個(gè)點(diǎn)為根,分別構(gòu)建樹,樹形DP,求節(jié)點(diǎn)下面的哪條路有最小邊,找到不走的邊的最小權(quán)值。輸出。
            #include <iostream>
            #include <vector>
            using namespace std;
            #define maxn 10005
            int MinN(int x,int y) {return x<y?x:y;}
            struct node{int v,w;};
            vector<node> map[maxn],newmap[maxn];
            int DFn[maxn]; //深搜時(shí)節(jié)點(diǎn)的訪問順序
            int low[maxn]; //存放當(dāng)前接點(diǎn)不經(jīng)過其父親節(jié)點(diǎn)能夠訪問DFn值最小的節(jié)點(diǎn)
            int color[maxn];
            int dp[maxn];
            int index;
            int n,m,q;
            int minu,minv,minw;
            bool done[maxn];


            void DFS(int x,int farther)
            {
            int i;
            DFn[x]=low[x]=index++;//賦初值
            for(i=0;i<map[x].size();i++)
            {
            if(!DFn[map[x][i].v])
            {
            DFS(map[x][i].v,x);
            low[x]=MinN(low[x],low[map[x][i].v]);//檢查子節(jié)點(diǎn)能返回的最早的祖先
            }
            else if(farther!=map[x][i].v)
            low[x]=MinN(low[x],DFn[map[x][i].v]);//檢查從自身出發(fā)的后向邊(無向圖中沒有橫叉邊)
            }
            }
            void Set_Color(int x)//染色,同一雙連通分量內(nèi)的節(jié)點(diǎn)用一種顏色
            {
            int i;
            node tmp;
            for(i=0;i<map[x].size();i++)
            {
            if(!color[map[x][i].v])
            {
            if(low[map[x][i].v]>DFn[x]) //(node,map[node][i])是割邊
            {
            color[map[x][i].v]=index++;
            tmp.v=color[map[x][i].v];tmp.w=map[x][i].w;
            newmap[color[x]].push_back(tmp);
            tmp.v=color[x];
            newmap[color[map[x][i].v]].push_back(tmp);
            if(map[x][i].w<minw)
            {
            minw=map[x][i].w;
            minu=color[x];
            minv=color[map[x][i].v];
            }
            }
            else color[map[x][i].v]=color[x]; //非割邊,即說明兩個(gè)節(jié)點(diǎn)處在同以雙連通分量中
            Set_Color(map[x][i].v);
            }
            }
            }


            int DFSDP(int x,int dist)
            {
            done[x]=1;
            dp[x]=dist;
            int i,a;
            for(i=0;i<newmap[x].size();i++)
            {
            if(!done[newmap[x][i].v])
            {
            a=DFSDP(newmap[x][i].v,newmap[x][i].w);
            dp[x]=MinN(dp[x],a);
            }
            }
            return dp[x];
            }

            void dfs(int x)
            {
            done[x]=1;
            int min1=100001,min2=100001,i,v=-1;
            for(i=0;i<newmap[x].size();i++)
            {
            if(!done[newmap[x][i].v])
            {
            if(dp[newmap[x][i].v]<=min1) {min2=min1;min1=dp[newmap[x][i].v];v=newmap[x][i].v;}
            else if(dp[newmap[x][i].v]<=min2) min2=dp[newmap[x][i].v];
            }
            }
            q=MinN(min2,q);
            if(v!=-1) DFS(v);
            }

            int main()
            {
            while(scanf("%d%d",&n,&m)!=EOF)
            {
            int a,b,w,i;
            node tmp;
            for(i=0;i<maxn;i++)
            {
            map[i].clear();
            newmap[i].clear();
            }
            for(i=0;i<m;i++)
            {
            scanf("%d%d%d",&a,&b,&w);
            tmp.v=b-1;tmp.w=w;
            map[a-1].push_back(tmp);
            tmp.v=a-1;
            map[b-1].push_back(tmp);
            }
            index=1;
            memset(DFn,0,sizeof(DFn));
            DFS(0,-1);
            memset(color,0,sizeof(color));
            color[0]=1;
            index=2;
            minw=100001;
            Set_Color(0);
            memset(dp,-1,sizeof(dp));
            memset(done,0,sizeof(done));
            done[minu]=done[minv]=1;
            DFSDP(minu,minw);
            DFSDP(minv,minw);
            q=100001;
            memset(done,0,sizeof(done));
            done[minu]=done[minv]=1;
            dfs(minu);
            dfs(minv);
            if(q!=100001) printf("%d\n",q);
            else printf("-1\n");
            }
            return 0;
            }   回復(fù)  更多評論   

            # re: The 36th ACM/ICPC Asia Regional Dalian Online Contest 大連2011ICPC網(wǎng)絡(luò)賽 個(gè)人題解 2011-09-04 19:13 PWK

            代碼粘錯(cuò)啦,比賽的時(shí)候代碼寫的太挫啦,發(fā)現(xiàn)命名了2個(gè)DFS,后面那個(gè)改小寫啦,粘的中每改。dfs函數(shù)中的dfs函數(shù)改成小寫。
            void dfs(int x)
            {
            done[x]=1;
            int min1=100001,min2=100001,i,v=-1;
            for(i=0;i<newmap[x].size();i++)
            {
            if(!done[newmap[x][i].v])
            {
            if(dp[newmap[x][i].v]<=min1) {min2=min1;min1=dp[newmap[x][i].v];v=newmap[x][i].v;}
            else if(dp[newmap[x][i].v]<=min2) min2=dp[newmap[x][i].v];
            }
            }
            q=MinN(min2,q);
            if(v!=-1) dfs(v);
            }  回復(fù)  更多評論   

            # re: The 36th ACM/ICPC Asia Regional Dalian Online Contest 大連2011ICPC網(wǎng)絡(luò)賽 個(gè)人題解[未登錄] 2011-09-05 08:44 yzhw

            @PWK
            謝謝你~  回復(fù)  更多評論   

            # re: The 36th ACM/ICPC Asia Regional Dalian Online Contest 大連2011ICPC網(wǎng)絡(luò)賽 個(gè)人題解 2011-09-05 22:43 waterman

            問問博主,對于1008,如果x在y為根的子樹上,且最小值在x所在的這棵子樹上,就取次小的值,那么如果次小的值也在x所在的這棵子樹上,是否要繼續(xù)考慮第三小的值呢?  回復(fù)  更多評論   

            # re: The 36th ACM/ICPC Asia Regional Dalian Online Contest 大連2011ICPC網(wǎng)絡(luò)賽 個(gè)人題解 2011-09-06 09:21 yzhw

            @waterman
            這里的次小值是節(jié)點(diǎn)P中兒子子樹最小值的次小值,換句話說,假設(shè)把所有兒子子樹的最小值放在一個(gè)列表中,然后排個(gè)序的話,該子樹節(jié)點(diǎn)的次小值是排位第二的元素(當(dāng)然實(shí)現(xiàn)的時(shí)候不用這樣)。就是說,最小值和次小值不會(huì)處于同一顆子樹上  回復(fù)  更多評論   

            # re: The 36th ACM/ICPC Asia Regional Dalian Online Contest 大連2011ICPC網(wǎng)絡(luò)賽 個(gè)人題解 2011-09-13 22:05 demo

            ans2=min(ans2,1);這句直接ans2=1;就行了吧?  回復(fù)  更多評論   

            <2011年9月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            統(tǒng)計(jì)系統(tǒng)

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            国产精品久久久天天影视香蕉 | 久久精品人妻一区二区三区| 一本色道久久综合狠狠躁| 国产AV影片久久久久久| 成人a毛片久久免费播放| 久久精品嫩草影院| 久久精品成人免费网站| 国产精品久久久久久久久鸭| 激情伊人五月天久久综合| 国产精品对白刺激久久久| 精品久久久久久亚洲精品| 国产精品视频久久| 久久这里只有精品久久| 久久99精品久久久久久噜噜| 狠狠色综合久久久久尤物| 亚洲а∨天堂久久精品9966| 亚洲精品国产第一综合99久久| 久久伊人色| 亚洲AV乱码久久精品蜜桃| 99久久99久久久精品齐齐| 色综合久久久久| 欧美日韩精品久久久久| 国内精品久久久久影院老司| 伊人久久无码中文字幕| 久久九九亚洲精品| 三级韩国一区久久二区综合| 久久天天躁狠狠躁夜夜2020一| 久久午夜无码鲁丝片| 国产农村妇女毛片精品久久| 久久久久97国产精华液好用吗| 久久午夜无码鲁丝片秋霞 | 久久91精品国产91久久麻豆| 亚洲国产成人久久精品动漫| 四虎久久影院| 久久精品国产精品国产精品污| 99久久伊人精品综合观看| 亚洲精品无码久久一线| 久久性生大片免费观看性| 国产精品对白刺激久久久| 国产精品久久久久久久久久影院| 久久综合综合久久狠狠狠97色88|