查看: 1756|回復: 0
打印 上一主題 下一主題

[UVa] 10926 - How Many Dependencies?

[複製鏈接]
  • TA的每日心情
    鬱悶
    2015-5-15 22:38
  • 簽到天數: 33 天

    [LV.5]常住居民I

    75

    主題

    302

    帖子

    766

    積分

    版主

    TFcis - 105 附設監工官

    Rank: 7Rank: 7Rank: 7

    積分
    766

    台南一中資訊社程式設計達人 - 2014

    跳轉到指定樓層
    樓主
    發表於 2014-5-25 18:39:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

    趕快加入我們來參與討論吧!

    您需要 登錄 才可以下載或查看,沒有帳號?加入我們

    x
    本帖最後由 jd3 於 2014-5-25 18:47 編輯

    在演算法筆記裡有出現這個例題
    http://www.csie.ntnu.edu.tw/~u91029/Reachability.html
    但我覺得看了好像更不清楚XD

    翻譯:http://luckycat.kshs.kh.edu.tw/homework/q10926.htm

    題義釐清:只要有任何直接或間接關係都算
                      記得是輸出最多依賴關係的「編號」

    解題方法: DFS 或 BFS 看經過多少點
                       時間限制很寬鬆                   隨便搜一下幾乎不用考慮效率


    CODE:(這篇有點亂)
    /*
        UVA 10926
        AC
        22 ms
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<vector>

    using namespace std;



    int n;
    vector<int> list[128];
    int dist[128];
    bool vist[128];


    int dfs(int node)
    {
        vist[node] = true;   
        int d = 0;
        for(int i = 0 ; i < list[node].size() ; i++)
            if(!vist[list[node][i]])
                d += dfs(list[node][i]);
       
        return dist[node] = d+1;
    }


    int main()
    {
        int t;
        int depend;
       
        while(1)
        {
            scanf("%d",&n);
            if(n==0)
                return 0;
                
            //init
            for(int i = 0 ; i <= n ; i++)
                list[i].clear();
            
            
            //input
            for(int i = 1 ; i <= n ; i++)
            {
                scanf("%d",&t);
                for(int j = 1 ; j <= t ; j++)
                {
                    scanf("%d", &depend);
                    list[i].push_back(depend);
                }
            }
            
            
            int most = -1;
            int ans;
            for(int i = 1 ; i <= n ; i++)
            {
                memset(dist,-1,sizeof(dist));
                memset(vist,0,sizeof(vist));
                int a = dfs(i);
                if(a > most)
                {
                    most = a;
                    ans = i;
                }
            }
            printf("%d\n",ans);
        }
       
       
        return 0;
    }




    評分

    參與人數 1金幣 +3 收起 理由
    Sylveon + 3 C++11更簡單~

    查看全部評分

    <這是個人簽名欄位>
    回復

    使用道具 檢舉

    您需要登錄後才可以回帖 登入 | 加入我們

    本版積分規則

    快速回覆 返回頂部 返回列表