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

            poj3687 Labeling Balls

            Labeling Balls


            Time Limit: 1000MS
            Memory Limit: 65536K
            Total Submissions: 7703
            Accepted: 2068

            Description

            Windy has N balls of distinct weights from 1 unit to N units. Now he tries to label them with 1 to N in such a way that:

            1. No two balls share the same label.
            2. The labeling satisfies several constrains like "The ball labeled with a is lighter than the one labeled with b".

            Can you help windy to find a solution?

            Input

            The first line of input is the number of test case. The first line of each test case contains two integers, N (1 ≤ N ≤ 200) and M (0 ≤ M ≤ 40,000). The next M line each contain two integers a and b indicating the ball labeled with a must be lighter than the one labeled with b. (1 ≤ a, bN) There is a blank line before each test case.

            Output

            For each test case output on a single line the balls' weights from label 1 to label N. If several solutions exist, you should output the one with the smallest weight for label 1, then with the smallest weight for label 2, then with the smallest weight for label 3 and so on... If no solution exists, output -1 instead.

            Sample Input

            5  4 0  4 1 1 1  4 2 1 2 2 1  4 1 2 1  4 1 3 2 

            Sample Output

            1 2 3 4 -1 -1 2 1 3 4 1 3 2 4 

            Source

            POJ Founder Monthly Contest – 2008.08.31, windy7926778


            給n個球求編號,要求滿足m個關系
            關系 a,b表示  a的編號一定小于b的編號
            最后要求輸出所有編號對應的球號

            分析:
            請看這里
            http://imlazy.ycool.com/post.2144071.html

            最后一句話給了正確的貪心策略
                  小的頭部不一定排在前面,但是大的尾部一定排在后面

            開始一直中槍,題解中說的兩種情況都中

            最后終于發現是算法錯了

            唉,坑爹啊,這題目錯誤的算法樣例都過
            很丑的代碼
            #include <cstdio>
            #include 
            <cstdlib>
            #include 
            <cstring>
            #include 
            <cmath>
            #include 
            <ctime>
            #include 
            <cassert>
            #include 
            <iostream>
            #include 
            <sstream>
            #include 
            <fstream>
            #include 
            <map>
            #include 
            <set>
            #include 
            <vector>
            #include 
            <queue>
            #include 
            <algorithm>
            #include 
            <iomanip>
            using namespace std;
            #define maxn 210
            #define pp printf("here\n")
            bool mp[maxn][maxn],vis[maxn];
            int indre[maxn];
            bool q[maxn];
            int head,tail,n,m;
            struct point
            {
                
            int x,id;
            } ans[maxn];
            int num,num1,sec,se;
            void add(int x,int id)
            {
                se
            ++;
                ans[se].x
            =x;
                ans[se].id
            =id;
            }
            int cmp(point t1,point t2)
            {
                
            return t1.x<t2.x;
            }
            void topsort()
            {
                
            int i,j,tmp;
                
            bool flag;
                num
            =0;
                num1
            =0;
                sec
            =n;
                se
            =0;
                memset(q,
            0,sizeof(q));
                memset(vis,
            0,sizeof(vis));
                
            for(i=1; i<=n; i++)
                {
                    
            if (indre[i]==0)
                    {
                        vis[i]
            =1;
                        q[i]
            =1;
                        num
            ++;
                        num1
            ++;
                    }
                }
               
            // printf("%d\n",num1);
                while(num1)
                {
                    num1
            --;
                    tmp
            =n+1;
                    
            while(--tmp)
                    {
                        
            if(q[tmp]==1break;
                    }
                    q[tmp]
            =0;
                    add(tmp,sec);
                    sec
            --;
                    
            for(j=1; j<=n; j++)
                        
            if(mp[tmp][j]==1&&vis[j]==0)
                        {
                            indre[j]
            --;
                        }
                    
            for(j=1; j<=n; j++)
                        
            if(vis[j]==0&&indre[j]==0)
                        {
                            vis[j]
            =1;
                            q[j]
            =1;
                            num
            ++;//pp;
                            num1++;
                        }
                }
               
            // printf("%d\n",num);
                if(num!=n) printf("-1\n");
                
            else
                {
                    sort(ans
            +1,ans+n+1,cmp);
                    
            for(i=1; i<n; i++)
                        printf(
            "%d ",ans[i].id);
                    printf(
            "%d\n",ans[n].id);
                }
            }
            int main()
            {
                
            int x,y,t;
                scanf(
            "%d",&t);
                
            while(t--)
                {
                    scanf(
            "%d%d",&n,&m);
                    memset(mp,
            0,sizeof(mp));
                    memset(indre,
            0,sizeof(indre));
                    
            for(int i=1; i<=m; i++)
                    {
                        scanf(
            "%d%d",&x,&y);
                        
            if(!mp[y][x])
                        {
                            mp[y][x]
            =1;
                            indre[x]
            ++;
                        }
                    }
                    topsort();
                }
                
            return 0;
            }

            posted on 2012-07-13 15:34 jh818012 閱讀(177) 評論(0)  編輯 收藏 引用

            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導航

            統計

            常用鏈接

            留言簿

            文章檔案(85)

            搜索

            最新評論

            • 1.?re: poj1426
            • 我嚓,,輝哥,,居然搜到你的題解了
            • --season
            • 2.?re: poj3083
            • @王私江
              (8+i)&3 相當于是 取余3的意思 因為 3 的 二進制是 000011 和(8+i)
            • --游客
            • 3.?re: poj3414[未登錄]
            • @王私江
              0ms
            • --jh818012
            • 4.?re: poj3414
            • 200+行,跑了多少ms呢?我的130+行哦,你菜啦,哈哈。
            • --王私江
            • 5.?re: poj1426
            • 評論內容較長,點擊標題查看
            • --王私江
            一级做a爰片久久毛片看看| 97久久精品人妻人人搡人人玩| 久久精品中文字幕第23页| 久久精品无码免费不卡| 久久这里有精品| www.久久热| 久久这里只有精品首页| 久久99国产精品久久99果冻传媒| 欧美午夜A∨大片久久 | 久久免费99精品国产自在现线 | 亚洲精品高清一二区久久| 无码人妻久久久一区二区三区| 久久婷婷国产麻豆91天堂| 偷窥少妇久久久久久久久| 久久久精品午夜免费不卡| 中文字幕乱码人妻无码久久| 国内精品伊人久久久久网站| 97r久久精品国产99国产精| 无夜精品久久久久久| 亚洲乱亚洲乱淫久久| 2022年国产精品久久久久 | 国产精品一久久香蕉国产线看 | 久久中文字幕人妻丝袜| 精品久久久久久久久久久久久久久| 亚洲国产精品无码久久SM| 久久夜色精品国产| 91性高湖久久久久| 国产成人精品久久免费动漫| 日日噜噜夜夜狠狠久久丁香五月| 免费精品久久久久久中文字幕| 国产精品热久久无码av| 久久精品视频免费| 久久99毛片免费观看不卡| 久久国产欧美日韩精品| 色婷婷综合久久久久中文| 午夜精品久久久久久久久| 久久AV无码精品人妻糸列| 99久久精品免费看国产一区二区三区 | 狠狠色丁香久久婷婷综| 久久99精品久久只有精品| 99久久超碰中文字幕伊人|