zoukankan      html  css  js  c++  java
  • Dfs【p4306(bzoj 2208)】 [JSOI2010]连通数

    Description

    度量一个有向图恋情情况的一个指标是连通,指途中可达点对的个数。

    下图的连通数是14

    img

    现在要你求出连通数

    Input

    输入数据第一行是图顶点的数量,一个正整数N。 接下来N行,每行N个字符。第i行第j列的1表示顶点i到j有边,0则表示无边。

    Output

    输出一行一个整数,表示该图的连通数。

    难得看到省选出这种简单题,难道是为了考链式前向星?

    直接建边对每个点跑(dfs),对于到达的点直接(ans++),(即此时形成了点对.

    这题貌似不能直接回溯,需要(memset)

    代码

    #include<cstdio>
    #include<cstring>
    #define R register
    using namespace std;
    int head[200008],tot,ans,n;
    struct cod{int u,v;}edge[2200008];
    char s[200008];
    bool vis[200008];
    inline void add(int x,int y)
    {
    	edge[++tot].u=head[x];
    	edge[tot].v=y;
    	head[x]=tot;
    }
    void dfs(int u)
    {
    	if(vis[u])return;
    	ans++;vis[u]=true;
    	for(R int i=head[u];i;i=edge[i].u)
    	{
    		if(!vis[edge[i].v])
    		dfs(edge[i].v);
    	}
    }
    int main()
    {
    	scanf("%d",&n);
    	for(R int i=1;i<=n;i++)
    	{
    		scanf("%s",s+1);
    		for(R int j=1;j<=n;j++)
    			if(s[j]=='1')add(i,j);
    	}
    	for(R int i=1;i<=n;i++)
    	{
    		memset(vis,0,sizeof vis);
    		dfs(i);
    	}
    	printf("%d",ans);
    }
    
  • 相关阅读:
    二分
    枚举
    dp
    bfs
    bfs
    dfs
    ipython快捷键
    虚拟机串口连接嵌入式开发板
    rtmp向IR601移植过程(无功能步骤,只有移植步骤)
    静态库和动态库
  • 原文地址:https://www.cnblogs.com/-guz/p/9818002.html
Copyright © 2011-2022 走看看