Codeforces Round #365 (Div. 2) Mishka and trip

傳送門

題意就是一些城市,全部連起來,但是其中有些城市是首都,首都要和其他所有城市連接起來,每個城市有個美麗值,每條路的權值爲所連接兩個城市的美麗值的乘積。答案要求你求出所有路的權值總和。

首先先加首都的路,標記,然後再補其他路。

代碼如下

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define LL long long
using namespace std;

int c[100010];
int n,k;
bool flag[100010];
LL sums = 0LL , sumc = 0LL;
LL ans = 0LL;

int main()
{

    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++){
        scanf("%d",&c[i]);
        sums += c[i];
    }
    for(int i=1,x;i<=k;i++){
        scanf("%d",&x);
        sumc += c[x];
        flag[x] = true;
        ans += c[x]*(sums-sumc);
    }
    for(int i=1;i<=n;i++){
        if(flag[i] || flag[i+1]) continue;
        ans += c[i]*c[i+1];
    }
    if(!flag[n] && !flag[1]) ans+=c[n]*c[1];
    printf("%I64d\n",ans);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章