zoukankan      html  css  js  c++  java
  • [bzoj1574][Usaco2009 Jan]地震损坏Damage_dfs

    地震损坏Damage bzoj-1574 Usaco-2009 Jan

    题目大意题目链接。

    注释:略。


    想法

    显然对于每一个report点,和它直接相连的点都不可能到达1。我们将它打上标记。

    然后爆搜。不搜经过的店,不搜标记的点。

    显然,这样所有可以被到达的点都符合题意,用n减一下就行了。

    最后,附上丑陋的代码... ...

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    #define N 30010 
    #define M 100010 
    int head[N],nxt[M<<1],to[M<<1],tot;
    inline void add(int x,int y) {to[++tot]=y; nxt[tot]=head[x]; head[x]=tot;}
    inline void Add(int x,int y) {add(x,y); add(y,x);}
    bool cut[N];
    bool vis[N];
    void dfs(int pos)
    {
    	vis[pos]=1;
    	for(int i=head[pos];i;i=nxt[i]) if(!cut[to[i]]&&!vis[to[i]])
    	{
    		dfs(to[i]);
    	}
    }
    int main()
    {
    	int n,m,p;
    	scanf("%d%d%d",&n,&m,&p);
    	int a,b,x;
    	for(int i=1;i<=m;++i)
    	{
    		scanf("%d%d",&a,&b);
    		Add(a,b);
    	}
    	while(p--)
    	{
    		scanf("%d",&x);
    		for(int i=head[x];i;i=nxt[i])
    			cut[to[i]]=1;
    	}
    	dfs(1);
    	int ans=n;
    	for(int i=1;i<=n;++i)
    		if(vis[i])
    			--ans;
    	printf("%d",ans);
    	return 0;
    }
    

    小结:做问题时,如果已经得到了一种非常显然的结论,不要停止。尝试可不可能通过这个结论解出这个题或者直接得到更优美的结论。

  • 相关阅读:
    aria2
    Tomcat Manager Config
    selenium 入门(Java)
    java线上cpu、内存问题排查方法
    Java多线程知识点
    《Java7并发编程实战手册》读书笔记
    《Java并发编程的艺术》读书笔记
    centos7安装mysql
    Linux用户配置文件
    metasploit魔鬼训练营靶机环境搭建(第二章)
  • 原文地址:https://www.cnblogs.com/ShuraK/p/9669510.html
Copyright © 2011-2022 走看看