题目链接:Shopping
题意
在一条街上有1-n个店,你一开始在0这个位置,你需要访问每个店,并且最后到n+1这个点
然后有m个限制,就给你ci,di
表示你去ci这个店之前,你必须先到bi这个点才行
保证di>ci
问你最小距离走多少
贪心 少走回头路,那就走最大闭环 每走一次闭环 这段路就多走两次
代码参考自:http://www.cnblogs.com/qscqesze/p/5143061.html
#include<stdio.h>
#include<algorithm>
#define maxn 1010
using namespace std;
int main()
{
int n,m,i,j,r[maxn],x,y,ans;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1;i<=n+1;i++)
{
r[i]=i;
}
while(m--)
{
scanf("%d%d",&x,&y);
r[x]=max(r[x],y);
}
ans=n+1;
for(i=1;i<=n;)
{
int t=r[i];
int now=i;
while(now<=t)
{
t=max(t,r[now]);
now++;
}
ans+=2*(t-i);
i=now;
}
printf("%d\n",ans);
}
}