NC17967. 城市规划
描述
输入描述
第一行两个整数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)之间的道路C++14(g++5.4) 解法, 执行用时: 428ms, 内存消耗: 8544K, 提交时间: 2018-09-07 19:21:14
#include<cstdio> #include<algorithm> using namespace std; int n,m,x,y,mx[1000010],tmp,ans; #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; int read() { int tmp=0, fh=1; char c=getchar(); while (c<'0'||c>'9') {if (c=='-') fh=-1; c=getchar();} while (c>='0'&&c<='9') tmp=tmp*10+c-48, c=getchar(); return tmp*fh; } int main() { n=read(); m=read(); for (int i=1;i<=m;i++) { x=read(); y=read()-1; mx[y]=max(mx[y],x); } for (int i=1;i<n;i++) if (mx[i]) { if (mx[i]>tmp) { ans++; tmp=i; } } printf("%d\n",ans); return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 477ms, 内存消耗: 8416K, 提交时间: 2020-03-26 21:13:58
#include<cstdio> #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; } #define io read() int l[1000001]; int main() { const int n=io,m=io; for(int i=1,x,y;i<=m;++i) x=io,y=io, l[y]<x&&(l[y]=x); int las=0,cnt=0; for(int i=1;i<=n;++i) if(las<l[i]) ++cnt,las=i-1; printf("%d",cnt); }