2105. [NOIP2015] 信息傳遞

来源:http://www.cnblogs.com/zwfymqz/archive/2017/05/22/6891598.html
-Advertisement-
Play Games

★☆ 輸入文件:2015message.in 輸出文件:2015message.out 簡單對比 時間限制:1 s 記憶體限制:256 MB 【題目描述】 有n個同學(編號為1到n)正在玩一個信息傳遞的游戲。在游戲里每人都有一個固定的信息傳遞對象,其中,編號為i的同學的信息傳遞對象是編號為Ti同學。 ...


★☆   輸入文件:2015message.in   輸出文件:2015message.out   簡單對比
時間限制:1 s   記憶體限制:256 MB

【題目描述】

有n個同學(編號為1到n)正在玩一個信息傳遞的游戲。在游戲里每人都有一個固定的信息傳遞對象,其中,編號為i的同學的信息傳遞對象是編號為Ti同學。

游戲開始時,每人都只知道自己的生日。之後每一輪中,所有人會同時將自己當前所知的生日信息告訴各自的信息傳遞對象(註意:可能有人可以從若幹人那裡獲取信息,但是每人只會把信息告訴一個人,即自己的信息傳遞對象)。當有人從別人口中得知自己的生日時,游戲結束。請問該游戲一共可以進行幾輪?

【輸入格式】

輸入共2行。

第1行包含1個正整數n表示n個人。

第2行包含n個用空格隔開的正整數T1,T2,……,Tn其中第i個整數Ti示編號為i

的同學的信息傳遞對象是編號為Ti的同學,Ti≤n且Ti≠i

數據保證游戲一定會結束。

【輸出格式】

輸出共 1 行,包含 1 個整數,表示游戲一共可以進行多少輪。

【樣例輸入】


5

2 4 2 3 1


【樣例輸出】

 3

【提示】



游戲的流程如圖所示。當進行完第 3 輪游戲後, 4 號玩家會聽到 2 號玩家告訴他自

己的生日,所以答案為 3。當然,第 3 輪游戲後, 2 號玩家、 3 號玩家都能從自己的消息

來源得知自己的生日,同樣符合游戲結束的條件。


對於 30%的數據, n ≤ 200;

對於 60%的數據, n ≤ 2500;

對於 100%的數據, n ≤ 200000。


【來源】

在此鍵入。


 

一開始用vector居然還能搞四十分

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<map>
 6 #include<stack>
 7 #include<vector>
 8 #include<cstdlib>
 9 #include<algorithm> 
10 using namespace std;
11 const int MAXN=200001;
12 int n;
13 struct node
14 {
15     vector<int>v;
16     int num,to,but;
17 }a[MAXN];
18 int main()
19 {
20     freopen("2015message.in","r",stdin);
21     freopen("2015message.out","w",stdout);
22     scanf("%d",&n);
23     for(int i=1;i<=n;i++)
24         scanf("%d",&a[i].to),a[i].num=0,a[i].v.push_back(i);
25         
26     int ans=0;
27     while(1)
28     {
29         ans++;
30         for(int i=1;i<=n;i++)
31         {
32             for(int j=0;j<=a[i].num-a[i].but;j++)// i 把知道的所有人的信息跟to說 
33             {
34                 //a[a[i].to].num++;
35                 vector<int>::iterator s=find(a[i].v.begin(),a[i].v.end(),a[i].v[j]);
36                 if(s!=a[i].v.end())
37                 {
38                     a[a[i].to].v.push_back(a[i].v[j]);
39                     a[a[i].to].num++;
40                     a[a[i].to].but++;    
41                 }
42                 
43             }
44             //print(i);
45             for(int j=1;j<=a[a[i].to].num;j++)
46                 if(a[a[i].to].v[j]==a[i].to)
47                     printf("%d",ans),exit(0);
48         }
49         for(int i=1;i<=n;i++)
50         a[i].but=0;
51     }
52     return 0;
53 }

正確做法dfs求最小值

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<map>
 6 #include<stack>
 7 #include<vector>
 8 #include<cstdlib>
 9 #include<algorithm> 
10 #include<queue>
11 using namespace std;
12 const int MAXN=300001;
13 int n,a[MAXN];
14 int vis[MAXN];
15 int ans=0x7ffffff;
16 stack<int>s;
17 int dfs(int x)
18 {
19         s.push(x);
20         int num=0;
21         while(!s.empty())
22         {
23             int te=s.top();
24             if(!vis[te])
25             {
26                 s.push(a[te]);
27                 vis[te]=-1;
28             }
29             else if(vis[te]==-1)
30             {
31                 s.pop();
32                 vis[te]=1;
33                 num++;
34                 while(vis[s.top()]!=1)
35                 {
36                     vis[s.top()]=1;
37                     s.pop();
38                     num++;
39                 }
40                 s.pop();
41                 while(!s.empty())
42                 {
43                     vis[s.top()]=1;
44                     s.pop();
45                 }
46             }
47             else if(vis[te]==1)
48             {
49                 while(!s.empty())
50                 {
51                     vis[s.top()]=1;
52                     s.pop();
53                 }
54             }
55         }
56         return num;
57 }
58 int main()
59 {
60     freopen("2015message.in","r",stdin);
61     freopen("2015message.out","w",stdout);
62     scanf("%d",&n);
63     for(int i=1;i<=n;i++)
64         scanf("%d",&a[i]);
65     
66     for(int i=1;i<=n;i++)
67     {
68         if(!vis[i])
69         {
70             int p=dfs(i);
71             if(p!=0)
72             ans=min(ans,p);    
73         }
74     }
75     printf("%d",ans);
76     return 0;
77 }

 


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

-Advertisement-
Play Games
更多相關文章
  • 1. 攔截器用途 (1)攔截未登錄用戶直接訪問某些鏈接 (2)攔截日誌信息 (3)攔截非法攻擊,比如sql註入 2. 涉及jar、類 (1)spring-webmvc.jar (2)HandlerInterceptor(org.springframework.web.servlet:介面)、 Asy ...
  • 上周在安裝搜索引擎Elasticsearch時,要求安裝比較新的java 版本,我選擇了java 1.8.0,安裝java 成功後使用java -version 發現使用的版本仍舊是1.6.0, 查詢了一些資料,發現可以使用Linux的alternatives命令替換選擇軟體的版本。 說明:alte ...
  • 伺服器端多線程類: ...
  • dplyr專註處理dataframe對象, 並提供更穩健的與其它資料庫對象間的介面。 一、5個關鍵的數據處理函數: select() 返回列的子集 filter() 返回行的子集 arrange() 根據一個或多個變數對行排序。 mutate() 使用已有數據創建新的列 summarise() 對各 ...
  • querySet.distinct() 去重覆__exact 精確等於 like 'aaa' __iexact 精確等於 忽略大小寫 ilike 'aaa' __contains 包含 like '%aaa%' __icontains 包含 忽略大小寫 ilike '%aaa%',但是對於sqlit ...
  • Given a list, rotate the list to the right by k places, where k is non-negative. ...
  • 一:參考官方文檔 1. Elasticsearch 5.4.0英文手冊 https://www.elastic.co/guide/en/elasticsearch/reference/5.4/search-request-post-filter.html 2. 《Elasticsearch權威指南》 ...
  • 在這裡我們要說的拓撲排序是有前提的 我們在這裡說的拓撲排序是基於有向無環圖的!!!。 (⊙o⊙)…我所說的有向無環圖都知道是什麼東西吧。。 如果不知道,我們下麵先來來說說什麼是有向無環圖。 所謂有向無環圖,顧名思義是不存在環的有向圖(至於有向圖是什麼不知道的在前面我們有一個圖論講解上都有)。 點的入 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...