2024.11.05模拟赛( — _ — )
1.2024.10.29模拟赛(*^▽^*)2.2024.10.31模拟赛(*^▽^*)3.2024.11.01模拟赛( — _ — )4.2024.11.02模拟赛( — _ — )5.2024.11.04( — _ — )
6.2024.11.05模拟赛( — _ — )
7.2024.11.14&2024.11.15模拟赛( — _ — )8.2024.11.16模拟赛(*^▽^*)9.2024.11.19模拟赛( — _ — )10.2024.11.21模拟赛(*^▽^*)11.2024.11.23模拟赛(*^▽^*)12.2024.11.26模拟赛13.2024.12.28模拟赛14.2025.01.04模拟赛15.2025.01.08 模拟赛前言
然后呢,早上困得要死。困到什么地步了呢?困到T3T4读下来之后就全都忘了。是一点都不记得了那种。本来想着去厕所睡会儿,结果被那里的味道和冷空气劝退了。回到教室之后,才慢慢地清醒了过来,仔细推了下T1,又打了T2的暴力,T3T4实在不知道怎么写,就没有写。没有挂分,这是一件非常好的事情,T1 100分,T2 20分,共120分,开开心心开始订T2。
T1【同色三角形】
题目大意:
给定一张有n(1<=n<=1e5)个节点的无向完全图,给出m(1<=m<=3e5)条白边,剩下的边为黑边,求同色的三(三)元(角)环(形)的个数。
解题思路:
小小地运用一些排列组合的方法,可以求出这个图中所有边的数量。我们可以想到:若有一条边变成了白边,那么原本以这条白边组成的三角形就不合法了。每条边可以组成n-2个不同的三角形,所以所有白边的出现共会导致m*(n-2)个三角形不合法。
但是!若一个三角形有两条白边,它理应只被更新一次,却被两个白边更新了两次。这时候,我们就容斥一下,对于每个点,如果它的度数超过一(即出现上述情况),那么就要把每个三角形多减的加回来,也就是d[i]*(d[i]-1)/2(很好理解对叭)。
那要是一个三角形全是白边呢?我们可以想象:这个三角形第一次被减了3,第二次又加回了3(因为它会被每一条边都更新一遍),此时就相当于它仍被记了一个数,这正是我们想要的,所以就不用管。
可爱的小代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,m;
int d[N];
int tol;
signed main()
{
scanf("%lld%lld",&n,&m);
for (int i=1;i<=m;i++)
{
int u,v;
scanf("%lld%lld",&u,&v);
d[u]++;
d[v]++;
}
tol=n*(n-1)*(n-2)/6;
tol-=(n-2)*m;
for (int i=1;i<=n;i++)
{
if (d[i]>1) tol+=d[i]*(d[i]-1)/2;
}
printf("%lld",tol);
return 0;
}
T2T3T4没有讲,题解也看不懂,不会不会
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】