码迷,mamicode.com
首页 > 其他好文 > 详细

AtCoder Beginner Contest 103 D(贪心)

时间:2018-07-22 22:26:20      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:ring   isp   tco   nod   view   algorithm   def   code   gif   

AtCoder Beginner Contest 103 D

题目大意:n个点,除第n个点外第i与第i+1个点有一条边,给定m个a[i],b[i],求最少去掉几条边能使所有a[i],b[i]不相连.

按右端点从小到大排序,如果当前选的去掉的边在区间内,那么符合条件,否则ans++,并贪心地把去掉的边指向右端点,因为前面的区间都满足条件了,所以要去掉的边要尽量向右移使其满足更多的区间。

技术分享图片
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 #include <cmath>
 6 #include <queue>
 7 #include <map>
 8 #include <stack>
 9 #define ll long long
10 #define out(a) printf("%d",a)
11 #define writeln printf("\n")
12 using namespace std;
13 const int N=1e5+50;
14 int n,m;
15 int now,ans;
16 struct node
17 {
18     int x,y;
19 }a[N];
20 int read()
21 {
22     int s=0,t=1; char c;
23     while (c<0||c>9){if (c==-) t=-1; c=getchar();}
24     while (c>=0&&c<=9){s=s*10+c-0; c=getchar();}
25     return s*t;
26 }
27 ll readl()
28 {
29     ll s=0,t=1; char c;
30     while (c<0||c>9){if (c==-) t=-1; c=getchar();}
31     while (c>=0&&c<=9){s=s*10+c-0; c=getchar();}
32     return s*t;
33 }
34 bool cmp(node a,node b)
35 {
36     return a.y==b.y?a.x<b.x:a.y<b.y;
37 }
38 int main()
39 {
40     n=read(),m=read(); now=0;
41     for (int i=1;i<=m;i++)
42       a[i].x=read(),a[i].y=read();
43     sort(a+1,a+m+1,cmp);
44     for (int i=1;i<=m;i++)
45       if (now>a[i].x&&now<=a[i].y) continue;
46       else ans++,now=a[i].y;
47     out(ans);
48     return 0;
49 }
View Code

 

AtCoder Beginner Contest 103 D(贪心)

标签:ring   isp   tco   nod   view   algorithm   def   code   gif   

原文地址:https://www.cnblogs.com/Kaleidoscope233/p/9351507.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!