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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...