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

            搜索

            •  

            積分與排名

            • 積分 - 217939
            • 排名 - 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免费久久| 91久久精品国产91性色也| 国产精品亚洲综合久久| 色综合久久无码中文字幕| 97久久国产亚洲精品超碰热| 久久se精品一区二区影院| 亚洲精品tv久久久久久久久| 99久久精品国产一区二区三区| 中文字幕无码av激情不卡久久| 久久综合噜噜激激的五月天| 久久久久国产一区二区三区| WWW婷婷AV久久久影片| 女同久久| 国产成人久久777777| 久久99精品国产自在现线小黄鸭| 久久综合狠狠综合久久97色| 欧美一区二区精品久久| 无码人妻精品一区二区三区久久久 | 久久香蕉超碰97国产精品| 久久男人AV资源网站| 丰满少妇人妻久久久久久 | 亚洲AV无码久久精品狠狠爱浪潮| 久久99精品国产麻豆不卡| 成人国内精品久久久久影院| 亚洲va久久久噜噜噜久久天堂| 漂亮人妻被中出中文字幕久久| 久久高清一级毛片| 久久久久久国产精品无码下载| 97精品伊人久久久大香线蕉| 久久99精品国产99久久| 高清免费久久午夜精品| 国产精品女同久久久久电影院| 久久久久久午夜成人影院 | 久久精品免费一区二区三区| 久久久无码一区二区三区| 麻豆一区二区99久久久久| 亚洲av日韩精品久久久久久a| 狠狠色丁香久久婷婷综合_中| 亚洲精品无码久久久| 久久精品国产亚洲av麻豆图片| 久久久久久国产a免费观看黄色大片 |