• <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>
            隨筆 - 87  文章 - 279  trackbacks - 0
            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            潛心看書研究!

            常用鏈接

            留言簿(19)

            隨筆分類(81)

            文章分類(89)

            相冊

            ACM OJ

            My friends

            搜索

            •  

            積分與排名

            • 積分 - 217919
            • 排名 - 117

            最新評論

            閱讀排行榜

            評論排行榜

            Girls and Boys

            Time limit: 10 Seconds?? Memory limit: 32768K??
            Total Submit: 628?? Accepted Submit: 188??

            the second year of the university somebody started a study on the romantic relations between the students. The relation “romantically involved” is defined between one girl and one boy. For the study reasons it is necessary to find out the maximum set satisfying the condition: there are no two students in the set who have been “romantically involved”. The result of the program is the number of students in such a set.

            The input contains several data sets in text format. Each data set represents one set of subjects of the study, with the following description:

            the number of students
            the description of each student, in the following format
            student_identifier:(number_of_romantic_relations) student_identifier1 student_identifier2 student_identifier3 ...
            or
            student_identifier:(0)

            The student_identifier is an integer number between 0 and n-1, for n subjects.
            For each given data set, the program should write to standard output a line containing the result.

            An example is given in Figure 1.


            Input

            7
            0: (3) 4 5 6
            1: (2) 4 6
            2: (0)
            3: (0)
            4: (2) 0 1
            5: (1) 0
            6: (2) 0 1
            3
            0: (2) 1 2
            1: (1) 0
            2: (1) 0


            Output

            5
            2

            #include? < iostream > ?
            using ? namespace ?std;

            const ? int ?MAXN? = ? 1001 ;
            int ?uN,?vN;?? // u,v數目?
            bool ?g[MAXN][MAXN]; // g[i][j]?表示?xi與yj相連?
            bool ?p[MAXN][MAXN];
            int ?xM[MAXN],?yM[MAXN];? // ?輸出量?
            bool ?chk[MAXN];? // 輔助量?檢查某輪?y[v]是否被check?

            int ?sign[MAXN];
            int ?N;

            bool ?SearchPath( int ?u)
            {
            ????
            int ?v;
            ????
            for ?(v = 0 ;?v < vN;?v ++ )
            ????
            {
            ????????
            if ?(g[u][v]? && ? ! chk[v])
            ????????
            {
            ????????????chk[v]?
            = ? true ;
            ????????????
            if ?(yM[v]? == ? - 1 ? || ?SearchPath(yM[v]))?
            ????????????
            {
            ????????????????yM[v]?
            = ?u;
            ????????????????xM[u]?
            = ?v;
            ????????????????
            return ? true ;
            ????????????}

            ????????}

            ????}

            ????
            return ? false ;
            }



            int ?MaxMatch()
            {
            ????
            int ?u;
            ????
            int ?ret? = ? 0 ;
            ????memset(xM,?
            - 1 ,? sizeof (xM));
            ????memset(yM,?
            - 1 ,? sizeof (yM));
            ????
            for ?(u = 0 ;?u < uN;?u ++ )
            ????
            {
            ????????
            if ?(xM[u]? == ? - 1 )
            ????????
            {
            ????????????memset(chk,?
            false ,? sizeof (chk));
            ????????????
            if ?(SearchPath(u))?ret ++ ;
            ????????}

            ????}

            ????
            return ?ret;
            }


            void ?SetSign( int ?v,? int ?s)
            {
            ????
            int ?i;
            ????sign[v]?
            = ?s;
            ????
            for ?(i = 0 ;?i < N;?i ++ )
            ????????
            if ?(sign[i]? == ? - 1 ? && ?p[v][i])
            ????????????SetSign(i,?
            1 - s);?????
            }


            void ?Solve()
            {
            ????
            int ?i,?j;?
            ????
            int ?tU,?tV;
            ????
            int ?num;
            ????memset(g,?
            false ,? sizeof (g));
            ????memset(p,?
            false ,? sizeof (p));
            ????memset(sign,?
            - 1 ,? sizeof (sign));
            ????
            for ?(i = 0 ;?i < N;?i ++ )
            ????
            {
            ????????scanf(
            " \n%d:?(%d) " ,? & tU,? & num);
            ????????
            for ?(j = 0 ;?j < num;?j ++ )
            ????????
            {
            ????????????scanf(
            " %d " ,? & tV);
            ????????????p[tU][tV]?
            = ? true ;
            ????????}

            ????}
            ?
            ????
            ????
            // -------------DFS標號法(劃分二分圖)--------------------?
            ???? /* ******************************************
            ????鄰接表的DFS標號:
            ????void?setmark(int?v,int?sign)
            ????{
            ????????sig[v]=sign;
            ????????int?i;
            ????????for?(i=0;i<nu[v];i++)
            ????????????if?(!sig[d[v][i]])
            ????????????????setmark(d[v][i],sign^3);
            ????}?
            ????for?(v=0;v<n;v++)
            ????????if?(!sig[v])?setmark(v,1);
            ????*******************************************
            */

            ????
            for ?(i = 0 ;?i < N;?i ++ )
            ????????
            if ?(sign[i]? == ? - 1 )?SetSign(i,? 1 );
            ????
            // ------------------------------------------????
            ????????
            ????
            for ?(i = 0 ;?i < N;?i ++ )
            ????
            {
            ????????
            if ?(sign[i]? == ? 1 )
            ????????
            {
            ????????????
            for ?(j = 0 ;?j < N;?j ++ )
            ????????????????
            if ?(p[i][j])?g[i][j]? = ? true ;
            ????????}

            ????}
            ????????????
            ????uN?
            = ?vN? = ?N;
            ????printf(
            " %d\n " ,?N - MaxMatch());?
            }
            ?

            int ?main()
            {
            ????
            while ?(scanf( " %d " ,? & N)? != ?EOF)
            ????
            {
            ????????Solve();
            ????}

            ????
            return ? 0 ;
            }

            posted on 2006-10-01 22:53 閱讀(582) 評論(0)  編輯 收藏 引用 所屬分類: ACM題目
            国产精品美女久久久网AV| 午夜精品久久久久久影视riav| 伊人久久大香线蕉AV色婷婷色| 亚洲欧美成人综合久久久 | 久久精品国产欧美日韩99热| 99久久国产综合精品女同图片| 久久久久99精品成人片欧美| 亚洲嫩草影院久久精品| 亚洲美日韩Av中文字幕无码久久久妻妇 | 久久99精品久久久久久| 手机看片久久高清国产日韩 | 91精品国产色综合久久| 久久亚洲欧洲国产综合| 久久久无码精品亚洲日韩蜜臀浪潮 | 精品午夜久久福利大片| 久久久久亚洲精品日久生情| 久久er国产精品免费观看2| 久久人人爽人人爽人人爽| 成人国内精品久久久久影院VR| 伊人久久综合成人网| 久久久久久国产精品免费免费| 久久久久无码精品国产| 久久最新免费视频| 久久99精品国产99久久6| 狠狠色丁香婷婷久久综合不卡| 久久久久久伊人高潮影院| 亚洲精品视频久久久| 久久精品国产精品亚洲| 欧美日韩中文字幕久久伊人| 日韩精品无码久久久久久| 性做久久久久久久久老女人| 久久成人永久免费播放| 2020最新久久久视精品爱 | 丰满少妇人妻久久久久久4| 99久久99这里只有免费费精品| 久久笫一福利免费导航 | 亚洲欧洲久久av| 亚洲日韩欧美一区久久久久我 | 久久九九精品99国产精品| 久久99国内精品自在现线| 久久99国产综合精品|