• <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年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            潛心看書研究!

            常用鏈接

            留言簿(19)

            隨筆分類(81)

            文章分類(89)

            相冊

            ACM OJ

            My friends

            搜索

            •  

            積分與排名

            • 積分 - 216652
            • 排名 - 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 閱讀(579) 評論(0)  編輯 收藏 引用 所屬分類: ACM題目
            一本色道久久88综合日韩精品 | 四虎国产精品成人免费久久| 久久久久亚洲AV成人网人人网站| 久久婷婷色综合一区二区| 久久精品成人一区二区三区| 91精品国产91久久久久久蜜臀| 成人久久精品一区二区三区| 久久99精品久久久久久久不卡| 一本一道久久综合狠狠老| 亚洲综合伊人久久大杳蕉| 无码人妻精品一区二区三区久久| 亚洲国产精品无码久久98| 久久久久成人精品无码中文字幕 | 日韩乱码人妻无码中文字幕久久| 久久午夜无码鲁丝片秋霞| 亚洲欧美日韩久久精品第一区| 天天躁日日躁狠狠久久| 久久国产一区二区| 国产综合免费精品久久久| 久久久久亚洲精品无码网址| 91麻豆国产精品91久久久| 久久久久久无码Av成人影院| 蜜桃麻豆www久久| 久久久久免费视频| 色妞色综合久久夜夜| 国产精品嫩草影院久久| 伊人久久大香线蕉综合影院首页| 国产成人无码久久久精品一| 久久久久久久久久免免费精品| 久久AV高潮AV无码AV| 国产精品免费久久| 日韩乱码人妻无码中文字幕久久| 国产成人久久久精品二区三区| 久久人人爽人人爽人人av东京热| 久久精品亚洲精品国产色婷| 久久久久久久久久久免费精品 | 99久久精品国产麻豆| 欧美日韩精品久久久免费观看| A狠狠久久蜜臀婷色中文网| 日日狠狠久久偷偷色综合96蜜桃 | 伊人久久五月天|