6#include7#include8#include9#include10#include11#include12#include

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

雙拓撲排序 HDOJ 5098 Smart Software Installe

系統 1629 0

?

題目傳送門

      
        
          
             1
          
          
            /*
          
          
             2
          
          
             雙拓撲排序:抄的,以后來補 
          
          
             3
          
          
             詳細解釋:
          
          
            http://blog.csdn.net/u012774187/article/details/40736995
          
          
             4
          
          
            */
          
          
             5
          
           #include <cstdio> 
          
             6
          
           #include <algorithm> 
          
             7
          
           #include <iostream> 
          
             8
          
           #include <sstream> 
          
             9
          
           #include <cstring> 
          
             10
          
           #include <cmath> 
          
             11
          
           #include <
          
            string
          
          > 
          
             12
          
           #include <vector> 
          
             13
          
           #include <queue> 
          
             14
          
           #include <map> 
          
             15
          
           #include <
          
            set
          
          > 
          
             16
          
           #include <ctime> 
          
             17
          
           #include <cstdlib> 
          
             18
          
          
            using
          
          
            namespace
          
          
             std; 
          
          
             19
          
          
             20
          
          
            #define
          
           lson l, mid, rt << 1 
          
             21
          
          
            #define
          
           rson mid + 1, r, rt << 1 | 1 
          
             22
          
           typedef 
          
            long
          
          
            long
          
          
             ll; 
          
          
             23
          
          
             24
          
          
            const
          
          
            int
          
           MAXN = 1e3 + 
          
            10
          
          
            ; 
          
          
             25
          
          
            const
          
          
            int
          
           INF = 
          
            0x3f3f3f3f
          
          
            ; 
          
          
             26
          
          
            const
          
          
            double
          
           PI = acos (-
          
            1.0
          
          
            ); 
          
          
             27
          
          
            const
          
          
            double
          
           EPS = 1e-
          
            9
          
          
            ; 
          
          
             28
          
          
            struct
          
          
             Edge 
          
          
             29
          
          
            { 
          
          
             30
          
          
            int
          
          
             v, nxt; 
          
          
             31
          
           }e[MAXN *
          
             MAXN]; 
          
          
             32
          
          
            int
          
          
            in
          
          [MAXN], 
          
            out
          
          
            [MAXN]; 
          
          
             33
          
          
            int
          
          
             re[MAXN], head[MAXN]; 
          
          
             34
          
          
            bool
          
          
             vis[MAXN]; 
          
          
             35
          
           map<
          
            string
          
          , 
          
            int
          
          >
          
             M; 
          
          
             36
          
           vector<
          
            int
          
          >
          
             G[MAXN]; 
          
          
             37
          
          
            int
          
          
             ecnt, cnt; 
          
          
             38
          
          
             39
          
          
            int
          
           TopoSort(
          
            void
          
          
            ) 
          
          
             40
          
          
            { 
          
          
             41
          
           queue<
          
            int
          
          > Q1, Q2; 
          
            //
          
          
            Q1 !re Q2 re
          
          
             42
          
          
            for
          
           (
          
            int
          
           i=
          
            1
          
          ; i<=cnt; ++
          
            i) 
          
          
             43
          
          
             { 
          
          
             44
          
          
            if
          
           (!
          
            in
          
          
            [i]) 
          
          
             45
          
          
             { 
          
          
             46
          
          
            if
          
           (!
          
            re[i]) Q1.push (i); 
          
          
             47
          
          
            else
          
          
             Q2.push (i); 
          
          
             48
          
          
             } 
          
          
             49
          
          
             } 
          
          
             50
          
          
             51
          
          
            int
          
           ans = 
          
            0
          
          
            ; 
          
          
             52
          
          
            while
          
           (!Q1.empty () || !
          
            Q2.empty ()) 
          
          
             53
          
          
             { 
          
          
             54
          
          
            if
          
           (Q1.empty () && !Q2.empty ()) 
          
            //
          
          
            重啟
          
          
             55
          
          
             { 
          
          
             56
          
           ans++
          
            ; 
          
          
             57
          
          
            while
          
           (!Q2.empty ()) 
          
            //
          
          
            所有都重啟安裝
          
          
             58
          
          
             { 
          
          
             59
          
          
             Q1.push (Q2.front ()); Q2.pop (); 
          
          
             60
          
          
             } 
          
          
             61
          
          
             } 
          
          
             62
          
          
            while
          
           (!
          
            Q1.empty ()) 
          
          
             63
          
          
             { 
          
          
             64
          
          
            int
          
           u =
          
             Q1.front (); Q1.pop (); 
          
          
             65
          
           vis[u] = 
          
            true
          
          
            ; 
          
          
             66
          
          
            for
          
           (
          
            int
          
           i=head[u]; i!=-
          
            1
          
          ; i=
          
            e[i].nxt) 
          
          
             67
          
          
             { 
          
          
             68
          
          
            int
          
           v =
          
             e[i].v; 
          
          
             69
          
          
            if
          
           (!(--
          
            in
          
          
            [v])) 
          
          
             70
          
          
             { 
          
          
             71
          
          
            if
          
           (!
          
            re[v]) Q1.push (v); 
          
          
             72
          
          
            else
          
          
             Q2.push (v); 
          
          
             73
          
          
             } 
          
          
             74
          
          
             } 
          
          
             75
          
          
             } 
          
          
             76
          
          
             } 
          
          
             77
          
          
             78
          
          
            return
          
          
             ans; 
          
          
             79
          
          
            } 
          
          
             80
          
          
             81
          
          
            void
          
           init(
          
            void
          
          
            ) 
          
          
             82
          
          
            { 
          
          
             83
          
          
             M.clear (); 
          
          
             84
          
           ecnt = cnt = 
          
            0
          
          
            ; 
          
          
             85
          
           memset (
          
            in
          
          , 
          
            0
          
          , 
          
            sizeof
          
           (
          
            in
          
          
            )); 
          
          
             86
          
           memset (
          
            out
          
          , 
          
            0
          
          , 
          
            sizeof
          
           (
          
            out
          
          
            )); 
          
          
             87
          
           memset (re, 
          
            0
          
          , 
          
            sizeof
          
          
             (re)); 
          
          
             88
          
           memset (head, -
          
            1
          
          , 
          
            sizeof
          
          
             (head)); 
          
          
             89
          
           memset (vis, 
          
            false
          
          , 
          
            sizeof
          
          
             (vis)); 
          
          
             90
          
          
            } 
          
          
             91
          
          
             92
          
          
            void
          
           add_edge(
          
            int
          
           u, 
          
            int
          
          
             v) 
          
          
             93
          
          
            { 
          
          
             94
          
           e[ecnt].nxt =
          
             head[u]; 
          
          
             95
          
           e[ecnt].v =
          
             v; 
          
          
             96
          
           head[u] = ecnt++
          
            ; 
          
          
             97
          
          
            } 
          
          
             98
          
          
             99
          
          
            int
          
           main(
          
            void
          
          ) 
          
            //
          
          
            HDOJ 5098 Smart Software Installer
          
          
            100
          
          
            { 
          
          
            101
          
          
            //
          
          
            freopen ("I.in", "r", stdin);
          
          
            102
          
          
            103
          
          
            string
          
          
             s; 
          
          
            104
          
          
            char
          
           name[
          
            1050
          
          
            ]; 
          
          
            105
          
          
            int
          
           n, cas = 
          
            0
          
          ; scanf (
          
            "
          
          
            %d
          
          
            "
          
          , &
          
            n); getchar (); getchar (); 
          
          
            106
          
          
            while
          
           (n--
          
            ) 
          
          
            107
          
          
             { 
          
          
            108
          
          
             init (); 
          
          
            109
          
          
            while
          
          
             (getline (cin, s)) 
          
          
            110
          
          
             { 
          
          
            111
          
          
            if
          
           (s[
          
            0
          
          ] == 
          
            '
          
          
            \0
          
          
            '
          
          ) 
          
            break
          
          
            ; 
          
          
            112
          
          
             istringstream sin (s); 
          
          
            113
          
           sin >>
          
             name; 
          
          
            114
          
          
            int
          
           len = strlen (name); 
          
            int
          
           flag = 
          
            0
          
          
            ; 
          
          
            115
          
          
            if
          
           (name[len-
          
            2
          
          ] == 
          
            '
          
          
            *
          
          
            '
          
          ) {flag = 
          
            1
          
          ; name[len-
          
            2
          
          ] = 
          
            '
          
          
            \0
          
          
            '
          
          
            ;} 
          
          
            116
          
          
            else
          
           name[len-
          
            1
          
          ] = 
          
            '
          
          
            \0
          
          
            '
          
          
            ; 
          
          
            117
          
          
            118
          
          
            string
          
           u =
          
             name, v; 
          
          
            119
          
          
            if
          
           (M.find (u) ==
          
             M.end ()) 
          
          
            120
          
           M[u] = ++
          
            cnt; 
          
          
            121
          
           re[M[u]] =
          
             flag; 
          
          
            122
          
          
            123
          
          
            while
          
           (sin >>
          
             v) 
          
          
            124
          
          
             { 
          
          
            125
          
          
            if
          
           (M.find (v) ==
          
             M.end ()) 
          
          
            126
          
           M[v] = ++
          
            cnt; 
          
          
            127
          
          
             add_edge (M[v], M[u]); 
          
          
            128
          
          
            out
          
          [M[v]]++
          
            ; 
          
          
            129
          
          
            in
          
          [M[u]]++
          
            ; 
          
          
            130
          
          
             } 
          
          
            131
          
          
             } 
          
          
            132
          
           printf (
          
            "
          
          
            Case %d: %d\n
          
          
            "
          
          , ++
          
            cas, TopoSort ()); 
          
          
            133
          
          
             } 
          
          
            134
          
          
            135
          
          
            return
          
          
            0
          
          
            ; 
          
          
            136
          
          
            } 
          
          
            137
          
          
            138
          
          
            /*
          
          
            139
          
          
            Case 1: 1 
          
          
            140
          
          
            Case 2: 2 
          
          
            141
          
          
            */
          
        
      
    

?

雙拓撲排序 HDOJ 5098 Smart Software Installer


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中文字幕福利视频 | 久久网欧美 | 大陆国产精品视频 | 久久亚洲国产精品五月天婷 | 亚洲日本香蕉视频 | 精品国精品国产自在久国产应用 | 一本伊大人香蕉高清在线观看 | 亚洲精品国产经典一区二区 | 国产欧美成人 | 久久精品国产久精国产80cm | 久草丁香 | 久久亚洲美女久久久久 | 亚洲精品日韩中文字幕久久久 | 成人一级黄色毛片 | 久操视频在线观看 | 偷偷操不一样的久久 | 久9热精品视频在线观看 | 成人亚洲国产精品久久 | 欧美一区二区在线观看免费网站 | 精品无人区乱码一区二区三区手机 | 成人精品免费视频 | 久久精品视频国产 | 亚洲爱爱久久精品 | 夜夜爽天天操 | 青青热在线观看视频精品 | 国产成人精品一区二区三在线观看 | 亚洲成精品动漫久久精久 | 福利姬在线视频国产观看 | 久热re国产手机在线观看 | 人人爱人人性 | 99久久精品国产一区二区 | 甜心女孩泰剧在线观看 | 欧美一级日韩 | 日本欧美一区二区三区 | 亚洲综合一区二区三区四区 | 久久久久久9 | 日本一区二区在线 | 亚洲人成在线观看 | 成年网站视频在线观看 | www.狠狠艹| 久久久免费精品 |