P6815 [PA2009] Cakes(三元环计数)

[PA2009] Cakes

题目描述

一个有 n 个点 m 条边的无向图,每个点有一个点权 a

对于任意一个三元环 (i,j,k)i<j<k,它的贡献为 max(ai,aj,ak)

求所有三元环的贡献和。

我们可以给无向边定向,具体的做法是
度数小的连向度数大的。
度数相等,编号小的连向大的。
然后枚举i的每个出点j,进行标记。
再对每个j枚举出点k,若k被i标记,则形成一个三元环。

首先这是一个DAG,正确性是显然的。
考虑分析复杂度。

di为原图中度数,idiodi表示新图中的入度和出度。
考虑j点
1.原图中dj<m,新图中odj<m
2.原图中dj>m,由于j只会向度数大于它的点连边。odi<m
所以复杂度是O(mm)级别的。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<bitset>
#include<cmath>
#include<set>
#include<unordered_map>
#define fo(i,a,b) for (ll (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (ll (i)=(b);(i)>=(a);(i)--)
#define mk(x,y) make_pair((x),(y))
#define A puts("Yes")
#define B puts("No")
using namespace std;
typedef double db;
typedef long long ll;
//typedef __int128 i128;
const int N=3e5+10;
//const int S=1e5+5;
//const int inf=1ll<<60;
const int inf=1<<29;
const ll mo=1e9+7;
struct node{
	int x,y;
};
node a[N];
int n,d[N],m,x,y;
vector<int> e[N];
int bz[N];
ll c[N];
int main()
{
//	freopen("data.in","r",stdin);
	
	scanf("%d %d",&n,&m);
	fo(i,1,n) scanf("%lld",&c[i]);
	
	fo(i,1,m) {
		scanf("%d %d",&x,&y);
		a[i]=(node){x,y};
		d[x]++; d[y]++;
	}
	
	fo(i,1,m) {
		x=a[i].x; y=a[i].y;
		if (d[x]!=d[y]) {
			if (d[x]>d[y]) swap(x,y);
			e[x].emplace_back(y);
		}
		else {
			if (x>y) swap(x,y);
			e[x].emplace_back(y);
		}
	}
	
	ll ans=0;
	fo(i,1,n) {
		for (int v:e[i]) bz[v]=i;
		for (int j:e[i]) for (int k:e[j]) {
			if (bz[k]==i) {
				ans+=max(c[i],max(c[j],c[k]));
			}
		}
	}
	printf("%lld",ans);
	
	return 0;
}

	
 
 
posted @   gan_coder  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
  1. 1 青春コンプレックス 結束バンド
  2. 2 ギターと孤独と蒼い惑星 結束バンド
  3. 3 星座になれたら 結束バンド
  4. 4 恋のうた (feat. 由崎司) 鬼頭明里
  5. 5 月と星空 カノエラナ
  6. 6 Cagayake!GIRLS[5人Ver.] (TV size Ver.) 桜高軽音部
  7. 7 不可思議のカルテ 不可思議のカルテ
  8. 8 優しさの理由 ChouCho
優しさの理由 - ChouCho
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : こだまさおり

作曲 : 宮崎誠

编曲 : 宮崎誠

退屈な窓辺に吹き込む風に

顔をしかめたのは

照れくささの裏返し

曖昧にうなずく手のひらの今日

描いてる自分は少し大げさで

何か変わりそうな気がしている鑋00:41.081]心に呼びかける君のせいだね

曇り空 のぞいた予感

手をのばそう

いつよりも力強い勇気で

光も影もまだ遠くて

それでも僕らは

優しさの理由が知りたい

今は誰の名前でもない

輝きの彼方へ

全部過去になる前に

見つけに行こう

この世界はまるで頼りないねと

うそぶく僕の目をからかうよう薣01:47.578]君が見てる空は何色だろう?

きっと青く高く清らかなはず

すれ違い 近づきながら

いつの日か

戸惑いも受け止めていけたら

言葉のままじゃもどかしくて

だから何度でも

不器用に重ねてしまうね

喜びも悲しみもここで

意味が生まれること

ふたり気づきはじめてる

その理由も

言葉のままじゃもどかしくて

何度でも

不器用に重ねてしまうよ

声にならない切なさごと

この想い 君に届け

光も影もまだ遠くて

それでも僕らは

優しさの理由が知りたい

今は誰の名前でもない

輝きの彼方へ

全部過去になる前に

見つけに行こう

点击右上角即可分享
微信分享提示