• <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 閱讀(178) 評論(0)  編輯 收藏 引用

            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導航

            統計

            常用鏈接

            留言簿

            文章檔案(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
            • 評論內容較長,點擊標題查看
            • --王私江
            亚洲精品乱码久久久久久蜜桃| 久久精品国产网红主播| 香港aa三级久久三级老师2021国产三级精品三级在 | 久久国产精品无码HDAV| 色综合色天天久久婷婷基地| 久久99这里只有精品国产| 99国产精品久久| 久久久久久伊人高潮影院| 欧美日韩中文字幕久久伊人| 久久人人爽人人爽人人av东京热| 伊人色综合久久天天| 亚洲精品无码久久久久久| 久久精品国产亚洲Aⅴ香蕉| 久久精品人成免费| 99久久国产亚洲综合精品| 国产一区二区精品久久岳| 无码专区久久综合久中文字幕 | 伊人久久大香线蕉av一区| 国产精品美女久久久免费| 久久精品国产亚洲av高清漫画 | 青青草国产精品久久久久| 久久婷婷午色综合夜啪| 久久99精品久久久久久水蜜桃| 国产精品欧美久久久天天影视| 色欲综合久久躁天天躁蜜桃| 亚洲人成无码久久电影网站| 久久五月精品中文字幕| 久久91精品久久91综合| 久久99精品国产自在现线小黄鸭 | 国产高清美女一级a毛片久久w| 久久99精品国产99久久6男男| 国产精品久久久久久吹潮| 久久久久亚洲AV无码专区桃色| 久久不见久久见免费视频7| 蜜臀av性久久久久蜜臀aⅴ| 久久久久se色偷偷亚洲精品av| 亚洲国产精品嫩草影院久久 | 国产精品九九久久免费视频| 久久精品国产99国产精品澳门 | 久久se精品一区二区影院| 久久精品国产第一区二区|