题解 CF1151E 【Number of Components】

\[\huge\mathcal{Description} \]

日期 2020年8月24日
编号 \(\texttt{CF1151E}\)
算法 数学
来源 无名小题

\[\huge\mathcal{Solution} \]

简单题!
首先,我们需要将连通块个数转换成点数减边数
然后,我们考虑每一个点对答案的贡献。
\(i\)个点,它被录用,当且仅当\(Left\)\(A_i\)&\(A_i\)\(Right\)
所以,第\(i\)个点对答案的贡献是\(A_i(N-A_i+1)\)
同理,我们可以算出每一条边的贡献。
减一减就好了呀!

\[\huge\mathcal{Code} \]

#include<bits/stdc++.h>
using namespace std;
int TotalPoint;
int Array[100001];
int main(void)
{
	register int i;
	cin>>TotalPoint;
	register long long Ans;
	Ans=0;
	for(i=1;i<=TotalPoint;i++)
	{
		cin>>Array[i];
		Ans+=1LL*Array[i]*(TotalPoint-Array[i]+1);
	}
	for(i=1;i<TotalPoint;i++)
	{
		Ans-=1LL*min(Array[i],Array[i+1])*(TotalPoint-max(Array[i],Array[i+1])+1);
	}
	cout<<Ans<<endl;
	return 0;
}

posted @ 2020-08-24 12:30  Bushuai_Tang  阅读(178)  评论(0编辑  收藏  举报