CodeForces 703B Mishka and trip(图论)
2016-08-06 19:36
537 查看
给定一个图,每个顶点有权值,顶点之间的边的权重为顶点的乘积
图为一个环 v1 v2 v3 。。。vn v0 首尾相连
同时给定n个顶点,这n个顶点与其他所有顶点都有一条边
直接扫描 记录之前的首都的权重之和以及所有的点的权重之和,对于每个顶点要连的边为上一个顶点以及和首都的边
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <map>
#include <stack>
#include <queue>
#include <string.h>
#include <string>
#include <iomanip>
#include <cstring>
#include <vector>
#include <functional>
#include <cmath>
#include <sstream>
#include<complex>
#include <set>
//#include<bits/stdc++.h>
using namespace std;
#define sp system("pause")
typedef long long ll;
typedef unsigned long long ull;
const ll mod = 1000000007;
#define PI acos(-1.0)
#define eps 1e-6
ll a[100000 + 100];
bool vis[100000 + 100];
int main()
{
int n, k;
cin >> n >> k;
for (int i = 0; i < n; i++)
{
scanf("%I63d", &a[i]);
}
memset(vis, false, sizeof vis);
for (int i = 1; i <= k; i++)
{
int x;
scanf("%d", &x);
vis[x-1] = true;
}
ll ans = 0; ll all = a[0];
ll cot = 0;
if (vis[0])cot = a[0];
for (int i = 1; i < n ; i++)
{
//cout << ans << cot<<all<<endl;
if (vis[i])
{
ans += all*a[i]; all += a[i];
cot += a[i]; continue;
}
ans += (cot*a[i]);
if (!vis[i - 1])ans += a[i - 1] * a[i];
if (vis[i])cot += a[i];
all += a[i];
}
if (!vis[0] && !vis[n - 1])ans += a[0] * a[n - 1];
cout << ans << endl;
//sp;
}
图为一个环 v1 v2 v3 。。。vn v0 首尾相连
同时给定n个顶点,这n个顶点与其他所有顶点都有一条边
直接扫描 记录之前的首都的权重之和以及所有的点的权重之和,对于每个顶点要连的边为上一个顶点以及和首都的边
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <map>
#include <stack>
#include <queue>
#include <string.h>
#include <string>
#include <iomanip>
#include <cstring>
#include <vector>
#include <functional>
#include <cmath>
#include <sstream>
#include<complex>
#include <set>
//#include<bits/stdc++.h>
using namespace std;
#define sp system("pause")
typedef long long ll;
typedef unsigned long long ull;
const ll mod = 1000000007;
#define PI acos(-1.0)
#define eps 1e-6
ll a[100000 + 100];
bool vis[100000 + 100];
int main()
{
int n, k;
cin >> n >> k;
for (int i = 0; i < n; i++)
{
scanf("%I63d", &a[i]);
}
memset(vis, false, sizeof vis);
for (int i = 1; i <= k; i++)
{
int x;
scanf("%d", &x);
vis[x-1] = true;
}
ll ans = 0; ll all = a[0];
ll cot = 0;
if (vis[0])cot = a[0];
for (int i = 1; i < n ; i++)
{
//cout << ans << cot<<all<<endl;
if (vis[i])
{
ans += all*a[i]; all += a[i];
cot += a[i]; continue;
}
ans += (cot*a[i]);
if (!vis[i - 1])ans += a[i - 1] * a[i];
if (vis[i])cot += a[i];
all += a[i];
}
if (!vis[0] && !vis[n - 1])ans += a[0] * a[n - 1];
cout << ans << endl;
//sp;
}
相关文章推荐
- codeforces 703B Mishka and trip
- CodeForces 703B Mishka and trip
- CodeForces 703B Mishka and trip【水题】
- (模拟+数学)codeforces - 703B Mishka and trip
- Codeforces-703B Mishka and trip
- CodeForces 703B Mishka and trip
- CodeForces 703B Mishka and trip(城市省会修路,待AC)
- CodeForces 703B Mishka and trip
- 【打CF,学算法——二星级】Codeforces 703B Mishka and trip (统计)
- codeforces - 703B - Mishka and trip(数学)
- codeforces B. Mishka and trip
- codeforces 703B B. Mishka and trip(数学)
- cf703B Mishka and trip
- Codeforces Round #365 (Div. 2) 703B Mishka and trip 水题
- Mishka and trip(CF 703B)
- codeforces - 703A - Mishka and Game(水)
- codeforces 811C C. Vladik and Memorable Trip
- Codeforces Round #365 (Div. 2) -- B. Mishka and trip (找规律枚举)
- Codeforces Round #365 (Div. 2) Mishka and trip
- 【Codeforces 703B - Mishka and trip】