首页 > 其他分享 >CF788B Weird journey

CF788B Weird journey

时间:2023-10-25 19:14:10浏览次数:17  
标签:typedef int CF788B long journey Weird include self define

闪总啊闪总你不能再这样天天刷水题了

这题乍一看很显然,\(m-2\)条边走两遍,那我不妨直接把每条边都看作两条,然后找出哪两条边只走一遍

发现在剔除只走一遍的边后,剩下的图一定存在欧拉回路,因此只要走一遍的两条边能接起来(即共享某个端点)即可,答案就是\(\sum_{i=1}^n C_{deg_i}^2\)

好然后写一发发现样例有自环,稍加讨论我们发现不能把自环直接算到上面的情况中,要特判记录下自环的个数\(self\),那么贡献就是\(C_{self}^2+self\times (m-self)\)(选两个自环或者一个自环一个任意边走一次都是合法的)

最后再注意下无解的情况判断,需要先剔除掉孤立点再看剩下的点是否在同一连通块内

#include<cstdio>
#include<iostream>
#include<utility>
#include<vector>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<set>
#include<array>
#include<random>
#include<bitset>
#include<ctime>
#include<limits.h>
#include<assert.h>
#include<unordered_set>
#include<unordered_map>
#define RI register int
#define CI const int&
#define mp make_pair
#define fi first
#define se second
#define Tp template <typename T>
using namespace std;
typedef long long LL;
typedef long double LDB;
typedef unsigned long long u64;
typedef __int128 i128;
typedef pair <int,int> pi;
typedef vector <int> VI;
typedef array <int,3> tri;
const int N=1e6+5;
int n,m,x,y,self,cnt,vis[N],ext[N]; vector <int> v[N];
inline void DFS(CI now)
{
	vis[now]=1; ++cnt; for (auto to:v[now]) if (!vis[to]) DFS(to);
}
int main()
{
	//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
	RI i; for (scanf("%d%d",&n,&m),i=1;i<=m;++i)
	if (scanf("%d%d",&x,&y),ext[x]=ext[y]=1,x==y) ++self; else v[x].push_back(y),v[y].push_back(x);
	int pos=1,tar=0; for (i=1;i<=n;++i) if (ext[i]) pos=i,++tar;
	if (DFS(pos),cnt!=tar) return puts("0"),0;
	auto C2=[&](CI x)
	{
		return 1LL*x*(x-1)/2LL;
	};
	LL ans=C2(self)+1LL*self*(m-self);
	for (i=1;i<=n;++i) ans+=C2(v[i].size());
	return printf("%lld",ans),0;
}

标签:typedef,int,CF788B,long,journey,Weird,include,self,define
From: https://www.cnblogs.com/cjjsb/p/17787910.html

相关文章

  • 【倍增】P3422 [POI2005]LOT-A Journey to Mars 题解
    P3422一道有点意思的题。看到是一个环,先破环为链,即\(a_{n+i}=a_i,b_{n+i}=b_i\),此时就只需要跳到\(x+n\)而无需判环了。如果顺时针走:令\(sum_i=\sum\limits_{j=1}^{i}{a_j-b_j}\),当能从\(x\)跳到\(x+n\)时,有\[sum_{x-1}\lesum_x,sum_{x-1}\lesum_{x+1},\dot......
  • 【精选视频免费看】Midjourney数字人换脸直播案例分享
    很多学员反馈,课程动辄几十、几百课时的学习时长,难以持续学习;经常课程买了=学了。为此,51CTO学堂在【视频课程】产品基础上,新增【短视频】版块,3分钟聚焦技术精华+个性化推荐内容,实现碎片化技术学习,在这里“随便逛逛,总有新收获”!新功能赶紧一睹为快,一起看看今天都有哪些值得我们IT人......
  • P6961 [NEERC2017] Journey from Petersburg to Moscow
    P6961感觉很神奇的题。一条路径的代价是前\(k\)大的边的权值和,有个假的做法是每个点维护一个堆,表示走到这个点前\(k\)大边的权值,读者可以思考一下这个做法为什么是假的。既然直接最短路不好处理,自己观察性质,可以发现前\(k\)条边权值和等价于每条边边权变为\(\max(val-va......
  • 【POJ 2488】A Knight‘s Journey 题解(深度优先搜索)
    背景骑士厌倦了一次又一次地看到同样的黑白方块,决定去旅行全世界每当骑士移动时,它是一个方向上的两个正方形和一个垂直于这个方向的正方形。骑士的世界就是他生活的棋盘。我们的骑士生活在一个棋盘上,这个棋盘的面积比普通的8*8棋盘小,但它仍然是矩形的。你能帮助这位冒险的骑士制......
  • CF671C Ultimate Weirdness of an Array
    区间maxgcd计数显然没有任何性质,考虑倒序枚举,转化为计算\(\sum_i\sum_{l,r}[f(l,r)\gei]\)。考虑用一个线段树维护这个东西。\(x\)节点上存最小的满足\(f(x,r)<i\)的\(r\)。那么一次操作只需要全局求和。我们考虑\(i+1\toi\)的过程,显然只有\(i\)的倍数会对这些位......
  • Midjourney充值失败完美解决方案及共享会员:Error: subscription already active for u
    Midjourney账号充值遇到避坑指南:今天给Midjourney账号充值遇到如下错误:Error:subscriptionalreadyactiveforuser:09e6aa4a-f7a8-4451-ae2c-9a9e5c2c522a问题是之前充值后把连续续费取消了,但是现在过期了,打算重新续费,结果就这样了。解决方案:1.Midjourney会在续费失败时......
  • 「题解」Codeforces 1063F String Journey
    先reverse一下。不难看出选出的字符串长度为\(1,2,\cdots,k\)一定不劣,仅考虑这种形式的。然后考虑一手dp,设\(f_{i}\)表示最后一个子串是\(i\)为结尾,最长长度是多少。这样转移就是\(f_i\getsf_{j}+1,iff\s[j-f_j+1,j]\text{is}s[i-f_j,i]\text{'ssubstring}\)......
  • SDXL 1.0出图效果直逼Midjourney!手把手教你快速体验!
    介绍最近,StabilityAI正式推出了全新的SDXL1.0版本。经过我的实际测试,与之前的1.5版本相比,XL的效果有了巨大的提升,可以说是全方位的超越。不仅在理解提示词方面表现出色,而且图片的构图、颜色渲染和画面细腻程度都有了很大的进步,实际出图效果堪比Midjourney。此外,该版本还继续采......
  • Midjourney API 申请和接入小白教程
    MidjourneyAPI为开发者提供了快速接入Midjourney平台的能力,它允许开发者通过简单的代码调用来访问Midjourney平台上的生成高质量的图像能力。本文将提供一份MidjourneyAPI的入门教程,以帮助开发者快速了解如何申请和接入该API。申请APIKey申请MidjourneyAPI的第一......
  • AI绘画| 迪士尼风格|可爱头像【附Midjourney提示词】
    Midjourney案例分享图片预览迪士尼风格|可爱头像高清原图及关键词Prompt已经放在文末网盘,需要的自取在数字艺术的新时代,人工智能绘画已经迅速崭露头角。作为最先进的技术之一,AI绘画结合了艺术和科学,开启了一片全新的视觉探索领域。本篇文章将深入介绍AI绘画的迪士尼风格可爱......