POJ 1236 Network of Schools 強連通分量
titlep1234
POJ 1236
CH POJ1236
LUOGU 2812 加強版
LUOGU 2746 普通版
code
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+10;
const int maxm=5e6+6;
template<typename T>inline void read(T &x)
{
x=0;
T f=1,ch=getchar();
while (!isdigit(ch) && ch^'-') ch=getchar();
if (ch=='-') f=-1, ch=getchar();
while (isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48), ch=getchar();
x*=f;
}
int spot[maxm],ver[maxm],Next[maxm],head[maxn],len=0;
void add(int x,int y)
{
spot[++len]=x,ver[len]=y,Next[len]=head[x],head[x]=len;
}
int Stack[maxn],top=0;
int dfn[maxn],low[maxn],id=0;
int belong[maxn],siz[maxn],tot=0;
bool instack[maxn];
void tarjan(int x)
{
dfn[x]=low[x]=++id;//存自己的時間和
instack[x]=1;
Stack[++top]=x;
for (int i=head[x],y;i;i=Next[i])
if (!dfn[y=ver[i]])
{
tarjan(y);
low[x]=min(low[x],low[y]);
}
else if (instack[y])//如果在別的聯通塊就不管了
low[x]=min(low[x],dfn[y]);
int k;
if (dfn[x]==low[x])//自己是自己的祖先(也就是掃不到時間更早的點了)
{
tot++;
do
{
k=Stack[top];
++siz[tot];
--top;
instack[k]=0;
belong[k]=tot;
}while (k!=x);
}
}
int n,m,a,ans1=0,ans2=0,In[maxn],Out[maxn];
int main()
{
read(n);
for (int i=1;i<=n;++i)
while (1)
{
read(a);
if (!a) break;
++m;
add(i,a);
}
memset(instack,0,sizeof(instack));
for (int i=1;i<=n;++i)
if (!dfn[i]) tarjan(i);//並不一定是個連通圖
for (int i=1,x,y;i<=m;++i)
if (belong[x=spot[i]]!=belong[y=ver[i]])//自己圖內不管
++In[belong[y]],//y的入度+1
++Out[belong[x]];//x的出度+1
for (int i=1;i<=tot;++i)//統計出度入度為0的點的出現次數
{
if (!In[i]) ++ans1;
if (!Out[i]) ++ans2;
}
ans2=max(ans1,ans2);//****第二問,所有點要出度不為0而且入度不為0
if (tot==1) ans1=1,ans2=0;//****嗯要特判
printf("%d\n%d",ans1,ans2);
return 0;
}
相關文章
- Network of Schools(POJ-1236)
- POJ 3694 Network 邊雙連通分量+LCA
- 強連通分量
- The Bottom of a Graph-POJ2553強連通
- Tarjan求強連通分量
- UVA1327 && POJ1904 King's Quest(tarjan+巧妙建圖+強連通分量+縮點)
- 【Tarjan SCC 加邊使得所有圖聯通 至少選取多少個點能圖聯通 】Network of Schools加強版.md
- 【模板】tarjan 強連通分量縮點
- 強連通分量(Tarjan演算法)演算法
- 無向連通圖點雙連通分量
- 無向連通圖邊雙連通分量
- Network(POJ-1144)
- POJ 1861 Network (Kruskal)
- 有向圖的強連通分量 模版
- Tarjan演算法(強連通分量分解)演算法
- Tarjan 求有向圖的強連通分量
- 圖論——強連通分量(Tarjan演算法)圖論演算法
- P2746 [USACO5.3] 校園網Network of Schools
- kosaraju 和 tarjan演算法詳解(強連通分量)演算法
- UVA-11504 - Dominos(有向圖的強連通分量)
- Day7 割點、割邊和強連通分量
- 強聯通分量tarjan
- 強連通分量及縮點 演算法解析及例題演算法
- POJ - 2236 Wireless Network (kuangbin - 簡單搜尋)
- 邊分治維護強連通分量(CF1989F,P5163)
- 尋找圖的強連通分量:tarjan演算法簡單理解演算法
- Day8 雙連通分量
- 抓間諜(強連通)
- 強聯通分量及縮點法
- 20行程式碼實現,使用Tarjan演算法求解強連通分量行程演算法
- 有向圖的連通性(判強連通)
- 【筆記/模板】無向圖的雙連通分量筆記
- HDU 1236 排名(Java)Java
- 「學習筆記」雙連通分量、割點與橋筆記
- 直流分量2
- Mysql:1236常見錯誤MySql
- Docker-Bridge Network 02 容器與外部通訊Docker
- 強化學習-學習筆記12 | Dueling Network強化學習筆記