爆刷PAT(甲级)——之【1013】 Battle Over Cities (25)——简单图论dfs搜索

题意:给N个点M个边,再给K个点的编号,输出每个点Ki是割点的时候,强联通块个数-1的值

难点:不知道为什么,一直超时了。。。。

     输入数据这么小。。。我大胆的假设,结局万万没想到,输入不能用  cin/cout  要用 格式化输入scanf ,否则就会超时!!!

Code:   虽然思路都差不多,写法也一样,但我觉得还是不够精炼,向柳巨巨学习。他们都是直接把割点搜索之前设置为  book[u]=true ,不存在我这种麻烦的 ban 变量的emmmm  ... ╥﹏╥

#include
#include
#include
#include
#include
#include
using namespace std;
#define inf 1009
#define INF 0x3f3f3f3f
#define loop(x,y,z) for(x=y;x>v;
        memset(book,0,sizeof book);
        ban=v;//将此点ban掉
        sum=0;
        loop(j,1,n+1)
            if(j!=ban&&!book[j])//对各点开始搜连通块,ban点就不用搜了
            {
                sum++;//printf("--- %d\n",j);
                dfs(j);
            }
        printf("%d\n",sum-1);//修路等于连通数-1
    }
}

int main()
{
    Input();
    return 0;
}

 

你可能感兴趣的:(PAT甲级【爆刷】)