牛客练习赛26 C 城市规划【思维+贪心】

链接 :https://www.nowcoder.com/acm/contest/180/C

来源 :牛客网
 

城市规划

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

小a的国家里有n个城市,其中第i和第i - 1个城市之间有无向道路连接,特殊的,第1个城市仅与第2个城市相连

为了减轻道路维护负担,城市规划局局长MXT给出了m个要求,他想让小a断开一些道路,使得任意1 ≤ i ≤ m ,城市xi不能到达城市yi

同时最小化断开道路的数量。

输入描述:

第一行两个整数n, m,分别表示城市的数量和请求的数量
接下来m行,每行两个整数x,y,表示需要使得x不能到达y

输出描述:

输出一个整数,表示最小断开桥的数量

示例1

输入

4 2
1 3
2 4

输出

1

说明

可以断开(2, 3)城市之间的道路

示例2

输入

4 3
1 3
2 4
1 2

输出

2

说明

可以断开(1, 2) (2, 3)之间的道路

备注:

对于100%的数据:n ≤ 106, m ≤ 107
本题不卡常数,请设计严格线性做法

读入文件较大,请使用读入优化,本机调试时请使用文件输入输出
#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1<<22, stdin), p1 == p2) ? EOF : *p1++)
char buf[(1 << 22)], *p1 = buf, *p2 = buf;
inline int read() {
    char c = getchar(); int x = 0, f = 1;
    while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
    while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}
用法:
int a = read(), b = read();
std::cout << a + b;

由于nowcoder的编译器限制,如果需要在程序中开107级别的数组,可能会出现内存超限的情况,请使用new函数手动申请
用法:
int* P = new int[(int)1e7 + 10];

题解:首先需要读入优化。程序flag[y]标记结点y是否在查询中出现,pos[y]记录要使y和对应的x断开至少要从什么位置之后断开一条边,例如x和y分别为1和4,那么pos[4]=1表明至少要从1编号之后选择一条边,由于y值可能相同,因此程序有取pos[y]的较大值的操作。l 记录上次断掉的边的位置,初始化为0,对于当前的y如果pos[y]>=l表明必须再断掉一条边才能满足x和y不连通,此时更新答案和l的值

AC的C++代码:

#include<iostream>

using namespace std;

//读入优化 
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<22,stdin),p1 == p2)?EOF:*p1++)
char buf[(1<<22)],*p1=buf,*p2=buf;
inline int read(){
    char c=getchar();int x=0,f=1;
    while(c<'0'||c>'9'){if(c == '-') f=-1;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c = getchar();}
    return x * f;
}

const int N=1000010;
bool flag[N];//标记y出现的位置 
int pos[N];//pos[y]记录要使得y和对应的x断开至少要在哪个结点编号 

int main()
{
	int n,m,x,y;
	n=read(),m=read();
	while(m--){
		x=read();
		y=read();
		flag[y]=true;
		pos[y]=max(pos[y],x); 
	}
	//线性扫描
	int l=0,ans=0;
	for(int i=1;i<=n;i++)
	  if(flag[i]&&pos[i]>=l){
	  	l=i;
	  	ans++;
	  } 
	printf("%d\n",ans);
	return 0;
}
 

猜你喜欢

转载自blog.csdn.net/SongBai1997/article/details/82632853
今日推荐