wordpress mofile,seo外链优化方法,51ppt模板免费下载完整版免费ppt,宁波网站推广优化外包传送门 文章目录题意#xff1a;思路#xff1a;题意#xff1a;
给你nnn个点#xff0c;从iii到jjj的花费是max(ci,aj−ai)max(c_i,a_j-a_i)max(ci,aj−ai)#xff0c;求从111开始经过每个点再回到111的最小花费。
思路#xff1a;
首先可以发现我们的起点在哪…传送门
文章目录题意思路题意
给你nnn个点从iii到jjj的花费是max(ci,aj−ai)max(c_i,a_j-a_i)max(ci,aj−ai)求从111开始经过每个点再回到111的最小花费。
思路
首先可以发现我们的起点在哪里是一样的只需要走出一个环来就行。让后由于花费是max(ci,aj−ai)max(c_i,a_j-a_i)max(ci,aj−ai)所以我们至少要花费cic_ici最终的花费一定∑i1nci\sum _{i1} ^n c_i∑i1nci所以我们将cic_ici减去即花费变成max(0,aj−ai−ci)max(0,a_j-a_i-c_i)max(0,aj−ai−ci)观察可知当从大的aia_iai到小的aja_jaj的时候花费一定是000所以我们按照aaa从小到大排序这样到最后一个点的时候回退到没有走过的点花费是000我们只需要确定从111开始走的最小花费即可也就是让aicia_ic_iaici最大所以对于每个iii我们都从maxji(ajcj)max_{ji}(a_jc_j)maxji(ajcj)转移过来就好啦不能转移的就相当于没走当到最后一个点的时候往后免费回退即可。
//#pragma GCC optimize(2)
#includecstdio
#includeiostream
#includestring
#includecstring
#includemap
#includecmath
#includecctype
#includevector
#includeset
#includequeue
#includealgorithm
#includesstream
#includectime
#includecstdlib
#define X first
#define Y second
#define L (u1)
#define R (u1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].ltr[u].r1)
#define Len(u) (tr[u].r-tr[u].l1)
#define random(a,b) ((a)rand()%((b)-(a)1))
#define db puts(---)
using namespace std;//void rd_cre() { freopen(d://dp//data.txt,w,stdout); srand(time(NULL)); }
//void rd_ac() { freopen(d://dp//data.txt,r,stdin); freopen(d://dp//AC.txt,w,stdout); }
//void rd_wa() { freopen(d://dp//data.txt,r,stdin); freopen(d://dp//WA.txt,w,stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pairint,int PII;const int N1000010,mod1e97,INF0x3f3f3f3f;
const double eps1e-6;int n;
PII p[N];
LL ans;int main()
{
// ios::sync_with_stdio(false);
// cin.tie(0);scanf(%d,n);for(int i1;in;i) scanf(%d%d,p[i].X,p[i].Y),ansp[i].Y;sort(p1,p1n);LL mxp[1].Xp[1].Y;for(int i2;in;i){ansmax(0ll,p[i].X-mx);mxmax(mx,1ll*p[i].Xp[i].Y);}printf(%lld\n,ans);return 0;
}
/**/