[BZOJ1574] [Usaco2009 Jan]地震损坏Damage(贪心 + dfs)

传送门

告诉你一些点不能到达1,由于是双向边,也就是1不能到达那些点

那么从1开始dfs,如果当前点能到达不能到达的点,那么当前点就是损坏的。

#include <cstdio>
#include <cstring>
#include <iostream>
#define N 100001

int n, m, p, cnt, tot;
int head[N], to[N << 1], next[N << 1];
bool vis[N], flag[N];

inline int read()
{
	int x = 0, f = 1;
	char ch = getchar();
	for(; !isdigit(ch); ch = getchar()) if(ch == ‘-‘) f = -1;
	for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - ‘0‘;
	return x * f;
}

inline void add(int x, int y)
{
	to[cnt] = y;
	next[cnt] = head[x];
	head[x] = cnt++;
}

inline void dfs(int u)
{
	int i, v;
	vis[u] = 1;
	for(i = head[u]; i ^ -1; i = next[i])
	{
		v = to[i];
		if(flag[v]) return;
	}
	for(i = head[u]; i ^ -1; i = next[i])
	{
		v = to[i];
		if(!vis[v]) dfs(v);
	}
	tot++;
}

int main()
{
	int i, x, y;
	n = read();
	m = read();
	p = read();
	memset(head, -1, sizeof(head));
	for(i = 1; i <= m; i++)
	{
		x = read();
		y = read();
		add(x, y);
		add(y, x);
	}
	for(i = 1; i <= p; i++)
	{
		x = read();
		flag[x] = 1;
	}
	dfs(1);
	printf("%d\n", n - tot);
	return 0;
}

  

时间: 2024-10-22 14:44:39

[BZOJ1574] [Usaco2009 Jan]地震损坏Damage(贪心 + dfs)的相关文章

1574: [Usaco2009 Jan]地震损坏Damage

1574: [Usaco2009 Jan]地震损坏Damage Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 425  Solved: 232[Submit][Status][Discuss] Description 农夫John的农场遭受了一场地震.有一些牛棚遭到了损坏,但幸运地,所有牛棚间的路经都还能使用. FJ的农场有P(1 <= P <= 30,000)个牛棚,编号1..P. C(1 <= C <= 100,000)条双向路经

bzoj 1574: [Usaco2009 Jan]地震损坏Damage

Description 农夫John的农场遭受了一场地震.有一些牛棚遭到了损坏,但幸运地,所有牛棚间的路经都还能使用. FJ的农场有P(1 <= P <= 30,000)个牛棚,编号1..P. C(1 <= C <= 100,000)条双向路经联接这些牛棚,编号为1..C. 路经i连接牛棚a_i和b_i (1 <= a_i<= P;1 <= b_i <= P).路经可能连接a_i到它自己,两个牛棚之间可能有多条路经.农庄在编号为1的牛棚. N (1 <

P1574: [Usaco2009 Jan]地震损坏Damage

卧槽卧槽卧槽,这道水题竟然让我WA了两遍!!评测系统卡了然后手贱又提交了一次,然后就悲催了呜呜.. 把与不能回家但牛棚完好的牛相邻的牛棚赋值为不能走(false),可以证明,如果该牛回不了家,则周围一圈的牛要么牛棚坏了,要么也是一样回不了,所以结果就是,该牛周围的牛都回不了牛庄,所以是一道贪心题,最后来一遍bfs搜索有多少牛可以回去,总数一减就是答案了. 1 type 2 node=record 3 f,t:longint; 4 end; 5 var p,c,n,i,j,f,t,sum:long

bzoj3396[Usaco2009 Jan]Total flow 水流*

bzoj3396[Usaco2009 Jan]Total flow 水流 题意: 求无环图的最大流.边数≤700. 题解: 管它有没有环.注意本题的节点标号既有大写字母,也有小写字母. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <queue> 5 #define inc(i,j,k) for(int i=j;i<=k;i++) 6 #de

3396: [Usaco2009 Jan]Total flow 水流

3396: [Usaco2009 Jan]Total flow 水流 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 179  Solved: 73[Submit][Status] Description Input 第1行输入N,之后N行每行描述一条水管,前两个英文字母表示水管的两端(大小写字母是不一样的),后一个整数表示水管的流量,流量不会超过1000. Output 一个整数,表示总流量. Sample Input 5 A B 3 B C 3

UVA 10317 - Equating Equations 贪心 dfs

UVA 10317 - Equating Equations 贪心 dfs ACM 题目地址:UVA 10317 - Equating Equations 题意: 给一个等式,但是这个等式不一定是正确的,要你对等式中的数字重新排序,使得等式成立.等式只有+和-,数字个数小于16. 分析: 以a + b - c = d - e为例子. 1. 我们把等式右边的各项都换到左边,a + b - c - d + e = 0 2. 把+项和-项放一起,就变成(a + b + e) - (c + d) = 0

BZOJ3394: [Usaco2009 Jan]Best Spot 最佳牧场

3394: [Usaco2009 Jan]Best Spot 最佳牧场 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 11  Solved: 9[Submit][Status] Description Input 第1行输入三个整数P,F C.之后F行每行输入一个整数表示一个贝茜喜欢的牧场.之后C行每行输入三个整数ai,bi,Ti,描述一条路. Output 一个整数,满足题目要求的最佳牧场.如果有多个答案,输出编号最小的 Sample Input

bzoj 1576: [Usaco2009 Jan]安全路经Travel 树链剖分

1576: [Usaco2009 Jan]安全路经Travel Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 665  Solved: 227[Submit][Status] Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, b_i,和t_i Output * 第1..N-1行: 第i行包含一个数:从牛棚_1到牛棚_i+1并且避免从牛棚1到牛棚i+1最短路经上最后一条牛

小黑的镇魂曲(HDU2155:贪心+dfs+奇葩解法)

题目:点这里 题目的意思跟所谓的是英雄就下100层一个意思--在T秒内能够下到地面,就可以了(还有一个板与板之间不能超过H高). 接触这题目是在昨晚的训练赛,当时拍拍地打了个贪心+dfs,果断跟我想的一模一样,TLE了. 赛后我在宿舍里修改了好几次--均无果.后来,我大胆地假设,估计是最后两组出问题TLE的..于是我就在程序里,指定在最后两组输出yes或者no,就这样奇葩地AC了-- 我实验了三次,总共有2*2种可能--(差点就觉得人品差到不行了) 终于AC了.当然,平时练习真心不要这样子,但是