P1726 上白澤慧音(0分)

来源:http://www.cnblogs.com/zwfymqz/archive/2017/07/09/7141826.html
-Advertisement-
Play Games

題目描述 在幻想鄉,上白澤慧音是以知識淵博聞名的老師。春雪異變導致人間之里的很多道路都被大雪堵塞,使有的學生不能順利地到達慧音所在的村莊。因此慧音決定換一個能夠聚集最多人數的村莊作為新的教學地點。人間之里由N個村莊(編號為1..N)和M條道路組成,道路分為兩種一種為單向通行的,一種為雙向通行的,分別 ...


題目描述

在幻想鄉,上白澤慧音是以知識淵博聞名的老師。春雪異變導致人間之里的很多道路都被大雪堵塞,使有的學生不能順利地到達慧音所在的村莊。因此慧音決定換一個能夠聚集最多人數的村莊作為新的教學地點。人間之里由N個村莊(編號為1..N)和M條道路組成,道路分為兩種一種為單向通行的,一種為雙向通行的,分別用1和2來標記。如果存在由村莊A到達村莊B的通路,那麼我們認為可以從村莊A到達村莊B,記為(A,B)。當(A,B)和(B,A)同時滿足時,我們認為A,B是絕對連通的,記為<A,B>。絕對連通區域是指一個村莊的集合,在這個集合中任意兩個村莊X,Y都滿足<X,Y>。現在你的任務是,找出最大的絕對連通區域,並將這個絕對連通區域的村莊按編號依次輸出。若存在兩個最大的,輸出字典序最小的,比如當存在1,3,4和2,5,6這兩個最大連通區域時,輸出的是1,3,4。

輸入輸出格式

輸入格式:

 

第1行:兩個正整數N,M

第2..M+1行:每行三個正整數a,b,t, t = 1表示存在從村莊a到b的單向道路,t = 2表示村莊a,b之間存在雙向通行的道路。保證每條道路只出現一次。

 

輸出格式:

 

第1行: 1個整數,表示最大的絕對連通區域包含的村莊個數。

第2行:若幹個整數,依次輸出最大的絕對連通區域所包含的村莊編號。

 

輸入輸出樣例

輸入樣例#1:
5 5
1 2 1
1 3 2
2 4 2
5 1 2
3 5 1
輸出樣例#1:
3
1 3 5

說明

對於60%的數據:N <= 200且M <= 10,000

對於100%的數據:N <= 5,000且M <= 50,000

    不會tarjan於是除了第一個點WA其他都超時,, 不做了。
  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<cmath>
  5 #include<queue>
  6 #include<algorithm>
  7 using namespace std;
  8 const int MAXN=5001;
  9 void read(int &n)
 10 {
 11     char c='+';int x=0;bool flag=0;
 12     while(c<'0'||c>'9')
 13     {c=getchar();if(c=='-')flag=1;}
 14     while(c>='0'&&c<='9')
 15     {x=x*10+c-48;c=getchar();}
 16     flag==1?n=-x:n=x;
 17 }
 18 struct node
 19 {
 20     int u,v,w,nxt;
 21 }edge[MAXN*4];
 22 int head[MAXN];
 23 int num=1;
 24 void add_edge(int x,int y,int z)
 25 {
 26     edge[num].u=x;
 27     edge[num].v=y;
 28     edge[num].w=z;
 29     edge[num].nxt=head[x];
 30     head[x]=num++;
 31 }
 32 bool have[MAXN][MAXN];
 33 int pre[MAXN];
 34 int nex[MAXN];
 35 int out[MAXN];
 36 void cler()
 37 {
 38     memset(have,0,sizeof(have));
 39     memset(pre,-1,sizeof(pre));
 40     memset(nex,-1,sizeof(nex));
 41 }
 42 int ans=0;
 43 int ansbg=0;
 44 int n,m;
 45 void calc_ans(int bg,int ed)
 46 {
 47     int num=0;
 48     int hh=ed;
 49     while(pre[ed]!=-1)
 50     {
 51         num++;
 52         ed=pre[ed];
 53     }
 54     num+=1;
 55     if(num>ans)
 56     {
 57         ans=num;
 58         ansbg=bg;
 59         for(int i=0;i<=n;i++)
 60             out[i]=nex[i];
 61     }
 62 }
 63 void dfs(int bg,int now)
 64 {
 65     for(int i=head[now];i!=-1;i=edge[i].nxt)
 66     {
 67         if(!have[now][edge[i].v])
 68         {
 69             if(edge[i].v==bg)
 70             {
 71                 calc_ans(bg,now);
 72                 return ;
 73             }
 74             have[now][edge[i].v]=1;
 75             have[edge[i].v][now]=1;
 76             pre[edge[i].v]=now;
 77             nex[now]=edge[i].v;
 78             dfs(bg,edge[i].v);
 79             have[now][edge[i].v]=0;
 80             have[edge[i].v][now]=0;
 81             pre[edge[i].v]=-1;
 82             nex[now]=-1;
 83         }
 84     }
 85 }
 86 int main()
 87 {
 88     
 89     read(n);read(m);
 90     for(int i=1;i<=n;i++)
 91         head[i]=-1;
 92     for(int i=1;i<=m;i++)
 93     {
 94         int x,y,how;
 95         read(x);read(y);read(how);
 96         if(how==1) add_edge(x,y,1);
 97         else {add_edge(x,y,1);add_edge(y,x,1);}
 98     }
 99     for(int i=1;i<=n;i++)
100     {
101         cler();
102         dfs(i,i);
103     }
104     printf("%d\n",ans);
105     if(ansbg)
106         printf("%d ",ansbg);
107     while(out[ansbg]!=-1)
108     {
109         ansbg=out[ansbg];
110         printf("%d ",ansbg);
111     }
112     return 0;
113 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 下麵的API註解包含了StringBuilder類中的重要方法 append(boolean b):將 boolean 參數的字元串表示形式追加到序列。 append(char c):將 char 參數的字元串表示形式追加到此序列。 append(char[] str):將 char 數組參數的字元 ...
  • 1.繼承與派生 上文我們已經說過,Python中一切皆對象。我們從對象中抽取了共同特征和技能,得到了類的概念。類與類之間也有共同特征,我們可以從有共同特征和技能的類中提取共同的技能和特征,叫做父類。 比如老師和學生,都有名字,年紀,生日,性別等等,都會走,說話,吃飯。。。我們就可以從老師和學生中總結 ...
  • 1.什麼是繼承? 使一個類擁有另一個類全部公開的屬性與行為的一種機制。 2.繼承的目的 假如一個類擁有另一個類的全部行為與屬性,並且這些屬性與行為數量較大,同時為其他類所共用,可以將這個類定義為子類去繼承另一個類,實現代碼復用。 3.繼承的影響 子類擁有了父類中非private的方法與屬性。 4.繼 ...
  • 題目描述 這次小可可想解決的難題和中國象棋有關,在一個N行M列的棋盤上,讓你放若幹個炮(可以是0個),使得沒有一個炮可以攻擊到另一個炮,請問有多少種放置方法。大家肯定很清楚,在中國象棋中炮的行走方式是:一個炮攻擊到另一個炮,當且僅當它們在同一行或同一列中,且它們之間恰好 有一個棋子。你也來和小可可一 ...
  • str類型python並沒有reverse函數。 然而,通過反向步進切片,我們可以高效地反轉一串字元串。 僅支持英文字元。 例: ...
  • SSM框架搭建(一) JDK和MAVEN環境搭建 SSM框架搭建(二) 創建MAVEN項目 SSM框架搭建(三) 資料庫創建和MyBatis生成器自動生成實體類、DAO介面和Mapping映射文件 SSM框架搭建(四) springmvc和mybatis的配置 JDK配置 CLASSPATH .;% ...
  • 6.高階特性 6.1迭代 如果給定一個list或tuple,我們可以通過for迴圈來遍歷這個list或tuple,這種遍歷我們稱為迭代(Iteration)。在Python中,迭代是通過for ... in來完成的。 因為dict的存儲不是按照list的方式順序排列,所以,迭代出的結果順序很可能不一 ...
  • 題目描述 歐幾里德的兩個後代Stan和Ollie正在玩一種數字游戲,這個游戲是他們的祖先歐幾里德發明的。給定兩個正整數M和N,從Stan開始,從其中較大的一個數,減去較小的數的正整數倍,當然,得到的數不能小於0。然後是Ollie,對剛纔得到的數,和M,N中較小的那個數,再進行同樣的操作……直到一個人 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...