P2921 [USACO08DEC]在農場萬圣節Trick or Treat on the Farm

對于一個牛,它存在兩種狀態:1.處于聯通分量 2.不處于聯通分量。對于處于聯通分量的牛,求出聯通分量的大小;對于不處于聯通分量的牛,求出其距離聯通分量的路程+聯通分量大小。

不同的聯通分量,染上不同的顏色,可以計算各個聯通分量的大小。

#include<bits/stdc++.h>
using namespace std;int vis[100005];
int low[100005];
int Loop[100005],color[100005],dfn[100005],head[100005],ans[100005],st[100005], Next[100005];
int pos;
int k=1;
int col;
int top;struct node
{int v,next;
}edge[100005];void Add(int u,int v)
{edge[k].v = v;edge[k].next = head[u];head[u] = k++;
}void Find(int root,int x,int step)
{if(ans[x]!=0){ans[root] = ans[x]+step;return;}elseFind(root,Next[x],step+1);
}void Tarjan(int u)
{dfn[u] = low[u] = ++pos;st[++top] = u;vis[u] = 1;for(int i=head[u];i!=-1;i=edge[i].next){int v = edge[i].v;if(!dfn[v]){Tarjan(v);low[u] = min(low[u],low[v]);}else if(vis[v]){low[u] = min(low[u],dfn[v]);}}if(dfn[u] == low[u]){col++;int x;do{x = st[top--];vis[x] = 0;color[x] = col;}while(x!=u);}
}int main()
{memset(head,-1,sizeof(head));int n,v;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&v);Next[i] = v;Add(i,v);if(v==i)ans[i] = 1;}for(int i=1;i<=n;i++){if(!dfn[i]){Tarjan(i);}}for(int i=1;i<=n;i++){Loop[color[i]]++;}for(int i=1;i<=n;i++){if(Loop[color[i]]!=1)ans[i] = Loop[color[i]];}for(int i=1;i<=n;i++){if(ans[i]==0)Find(i,Next[i],1);}for(int i=1;i<=n;i++){printf("%d\n",ans[i]);}return 0;
}
View Code

?

轉載于:https://www.cnblogs.com/alan-W/p/10756744.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394101.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394101.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394101.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ASP.NET MVC5+EF6+EasyUI 后臺管理系統(1)-前言與目錄(持續更新中...)

開發工具&#xff1a;VS2015(2012以上)SQL2008R2以上數據庫 您可以有償獲取一份最新源碼聯系QQ:729994997 價格 666RMB 升級后界面效果如下&#xff1a; 日程管理 http://www.cnblogs.com/ymnets/p/7094914.html 任務調度系統界面 http://www.cnblogs.com/ymnets/p/5065154.h…

leetcode106. 從中序與后序遍歷序列構造二叉樹(dfs)

根據一棵樹的中序遍歷與后序遍歷構造二叉樹。注意: 你可以假設樹中沒有重復的元素。例如&#xff0c;給出中序遍歷 inorder [9,3,15,20,7] 后序遍歷 postorder [9,15,7,20,3] 返回如下的二叉樹&#xff1a;3/ \9 20/ \15 7解題思路 根據后序遍歷的最后一個元素是父節點&…

【FRDM-K64F學習筆記】使用ARM mbed和Keil MDK下載你的第一個程序

FRDM-K64F開發平臺采用MK64FN1M0VLL12微控制器。該控制器包含一個帶有浮點單元的ARM Cortex-M4內核。其最高工作頻率為120MHz&#xff0c;具有256KB的RAM、1MB閃存以及許多其他外設。它非常適合大多數可以采用以太網、SD卡存儲以及板載模擬-數字轉換器的IoT應用。但是&#xff…

php 實時更新內容_億級視頻內容如何實時更新?優酷視頻背后的技術揭秘

簡介&#xff1a; 優酷視頻內容數據天然呈現巨大的網絡結構&#xff0c;各類數據實體連接形成了數十億頂點和百億條邊的數據量&#xff0c;面對巨大的數據量&#xff0c;傳統關系型數據庫往往難以處理和管理&#xff0c;圖數據結構更加貼合優酷的業務場景&#xff0c;圖組織使用…

ios集成firebase_如何使用Firebase將Google Login集成到Ionic應用程序中

ios集成firebaseby Ryan Gordon通過瑞安戈登(Ryan Gordon) 如何使用Firebase將Google Login集成到Ionic應用程序中 (How to integrate Google Login into an Ionic app with Firebase) A lot of apps these days need to maintain some form of user authentication. This hel…

面向對象三大核心特點,封裝、繼承和多態

封裝 封裝其實是一種思想&#xff0c;將事物狀態和功能裝進一個容器&#xff0c;那么這個容器在python中就是類&#xff0c;由這個類產生的對象都擁有類的屬性和功能 在面向對象的思想中&#xff0c;推崇將具有某些共同特征的事物歸為一類&#xff0c;那么這些事物就可以看做是…

java編寫某計算器控制臺程序_用java程序編寫一個計算器

點擊查看用java程序編寫一個計算器具體信息答&#xff1a;給你一個參考&#xff0c;希望不要被百度吞了當晚餐 import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.text.Decimal…

物聯網商機迸發 LPWAN芯片現身 本文轉自d1net(轉載)

聯發科技發表首款NB-IoT系統單芯片MT2625。來源&#xff1a;MediaTeK 物聯網(IoT)帶動的龐大商機吸引各方業者積極投入&#xff0c;尤其是各種聯網技術不斷現身&#xff0c;爭奪各式各樣極富發展潛力的應用領域。 根據IDC的調查報告&#xff0c;物聯網市場在2017年聲勢看漲&…

jquery之stop()的用法

工作中遇到過的實際案例&#xff1a; 1、我在項目里做的一個下拉菜單&#xff0c;當鼠標移上去的時候就菜單顯示&#xff0c;當鼠標離開的時候菜單隱藏 如果我快速不斷地將鼠標移入移出菜單&#xff08;即&#xff0c;當菜單下拉動畫未完成時&#xff0c;鼠標又移出了菜單&…

leetcode1123. 最深葉節點的最近公共祖先(dfs)

給你一個有根節點的二叉樹&#xff0c;找到它最深的葉節點的最近公共祖先。 回想一下&#xff1a; 葉節點 是二叉樹中沒有子節點的節點 樹的根節點的 深度 為 0&#xff0c;如果某一節點的深度為 d&#xff0c;那它的子節點的深度就是 d1 如果我們假定 A 是一組節點 S 的 最近…

sed空格替換成回車_【一題試水平】 利用sed命令將test.txt中所有的回車替換成空格?...

題目背景&#xff0c;這個題也很有年頭了&#xff0c;看似簡單&#xff0c;實則坑很大&#xff0c;good luck! 先不要看答案 看看自己能寫出多少方法.方法1 把每一行內容追加到Hold Space中&#xff0c;最后1行弄回到Pattern space中.然后進行替換基礎版[rootoldboyedu-show01 …

github 和git_學習編碼時如何學習Git和GitHub

github 和gitby Iago Rodrigues通過Iago Rodrigues 學習編碼時如何學習Git和GitHub (How you can learn Git and GitHub while you’re learning to code) In this article, I’ll give you some hints about how to become a Git/GitHub ninja. Also, as a bonus, I’ll show…

015_ICMP專項研究監控

一、數據demo cat /proc/net/snmp Ip: Forwarding DefaultTTL InReceives InHdrErrors InAddrErrors ForwDatagrams InUnknownProtos InDiscards InDelivers OutRequests OutDiscards OutNoRoutes ReasmTimeout ReasmReqds ReasmOKs ReasmFails FragOKs FragFails FragCreates …

leetcode129. 求根到葉子節點數字之和(dfs)

給定一個二叉樹&#xff0c;它的每個結點都存放一個 0-9 的數字&#xff0c;每條從根到葉子節點的路徑都代表一個數字。例如&#xff0c;從根到葉子節點路徑 1->2->3 代表數字 123。計算從根到葉子節點生成的所有數字之和。說明: 葉子節點是指沒有子節點的節點。示例 1:輸…

java for i i 區別,i ++amp;和i ++之間的區別是什么? ++我在for循環(Java)?

hello, Ive just started learning Java and now Im into for loop statement. I dont understand how i i works in a for loop statement.I mean how they work in mathematics operations like addition and subtraction. I hope some one will explain this to me.解決方案…

php 設置中文 cookie, js獲取

參考鏈接:http://www.nowamagic.net/librarys/veda/detail/1271 http://www.ruanyifeng.com/blog/2008/06/base64.html cookie.js 文件 var Cookies {}; /** * 設置Cookies */ Cookies.set function(name, value){ var argv arguments; var argc arguments.length; var exp…

學會這二十個正則表達式,能讓你少些1000行代碼!

正則表達式&#xff0c;是一個強大且高效的文本處理工具。通常情況下&#xff0c;通過一段表達準確的表達式&#xff0c;能夠非常簡短、快速的實現復雜業務邏輯。因此&#xff0c;正則表達式通常是一個成熟開發人員的標配&#xff0c;可以輔助實現開發效率的極強提升。在需要實…

mergesort_Mergesort算法的功能方法

mergesortby Joe Chasinga通過喬查辛加(Joe Chasinga) Mergesort算法的功能方法 (A functional approach to mergesort algorithm) Algorithms are often difficult for people to understand. I believe that this is because they are most often programmed or explained i…

循環內部異步函數處理相關問題解析

需求分析&#xff1a;根據一級標題ID篩選出所有對應的二級標題&#xff0c;返回一級標題ID&#xff0c;標題名和二級標題ID&#xff0c;標題名組成的數組 問題&#xff1a;通過forEach遍歷所有一級標題取對應的ID&#xff0c;根據ID條件查找所有的二級標題&#xff0c;遍歷符合…

nacos怎么修改服務分組_Nacos(六):多環境下如何“管理”及“隔離”配置和服務...

前言前景回顧&#xff1a;現如今&#xff0c;在微服務體系中&#xff0c;一個系統往往被拆分為多個服務&#xff0c;每個服務都有自己的配置文件&#xff0c;然后每個系統往往還會準備開發環境、測試環境、正式環境我們來說算一算&#xff0c;假設某系統有10個微服務&#xff0…