当前位置: 首页 > wzjs >正文

网站便宜建设好网站制作公司

网站便宜建设,好网站制作公司,html5做网站系统,吉祥物设计我敢赌,就算你知道怎么做,也必然得调试半天才能 AC。 [Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] 图片来自洛谷。 [Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis] 显然不可能正面计算。所以…

我敢赌,就算你知道怎么做,也必然得调试半天才能 AC。

[Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription]

在这里插入图片描述

图片来自洛谷

[Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis]

显然不可能正面计算。所以被迫正难则反。

把所有三元组分成四类:不考虑有没有边相连;有且只有一条边连接;有且只有两条边连接;三个点形成三元环。

每种情况分别考虑。

  1. 不考虑有没有边相连。
    等价于对所有 ( i , j , k ) s.t. 0 ≤ i < j < k < n (i,j,k) \quad \text{s.t.} \quad 0 \leq i <j<k<n (i,j,k)s.t.0i<j<k<n 求出 ∑ legal (i,j,k) A i + B j + C k \sum\limits_{\text{legal (i,j,k)}} Ai+Bj+Ck legal (i,j,k)Ai+Bj+Ck
    枚举 k k k,则 ( i , j ) (i,j) (i,j) 只能在 [ 0 , k − 1 ] [0,k-1] [0,k1] 中取值,共 k ( k − 1 ) 2 \dfrac{k(k-1)}{2} 2k(k1) 种情况。
    对于固定的 k k k ∑ 0 ≤ i < j < k A i + B j = ∑ 0 ≤ i < k − 1 ( ∑ i < j < k A i + B j ) = ∑ 0 ≤ i < k − 1 ( A i ( k − i − 1 ) + ∑ i < j < k B j ) \sum\limits_{0 \leq i < j <k}Ai+Bj=\sum\limits_{0 \leq i < k-1}\left ( \sum\limits_{i<j<k}Ai+Bj \right )=\sum\limits_{0\leq i <k-1} \left ( Ai(k-i-1)+\sum\limits_{i<j<k}Bj\right ) 0i<j<kAi+Bj=0i<k1(i<j<kAi+Bj)=0i<k1(Ai(ki1)+i<j<kBj)
    然后把括号内的项展开,可以得到关于 ∑ i 2 \sum i^2 i2 ∑ i \sum i i 的式子,这些式子都是有公式可以 O ( 1 ) O(1) O(1) 计算的。
  2. 有且只有一条边连接的三元组。
    枚举每条边 ( u , v ) s.t. u < v (u,v) \quad \text{s.t.} \quad u<v (u,v)s.t.u<v,则第三个点 w w w 只有三种情况: w < u < v w<u<v w<u<v u < w < v u<w<v u<w<v u < v < w u<v<w u<v<w。每种情况下 u , v u,v u,v 的贡献都是确定的,而 w w w 的和是连续正整数的和,可以用公式求出。
    注意: 用这种方法求出的三元组包含了第三步和第四步的情况。因此,准确地说,第二种情况是有边相连的三元组
  3. 有且只有两条边连接的三元组。
    这是最不好想的一种情况。不仅容易漏掉,也不好想解决方法。
    正解还是很惊艳的。三个点有且只有两条边连接,必然两条边有一个公共点。枚举这个公共点 u u u,那么 v , w v,w v,w 就只能在和 u u u 有边相连的点集中取值。
    问题是,这个点集可能很大,怎么办?
    那我们就不要同时考虑 v , w v,w v,w,仅考虑单个点对答案的贡献。
    如果 v < u v<u v<u,那么 v v v 前面的系数可能是 A A A 或者 B B B(绝对不会是 C C C)。如果系数是 A A A,那么 w w w v v v 大。在一个有限的点集中,我们很容易知道这样的 w w w 有多少个,因此 A v Av Av 的系数我们就可以求出来(请注意,我们只算 v v v 的贡献,至于 w w w 的和我们先不考虑)。其它情况同理。
    枚举点集里的所有点,即可求出第三种情况的贡献。
    注意: 第三步里也重复计算了第四步的情况。
  4. 有三条边连接的三元组。
    这部分最简单了。直接用三元组计数的模板即可。
    (当然,不会这个模板就是送命。)

现在来考虑容斥系数。分别记四个步骤算出来的结果为 S 1 , S 2 , S 3 , S 4 S_1,S_2,S_3,S_4 S1,S2,S3,S4

  • 所有的三元组都会在第一步中计算且仅计算一次。
  • 第二步中,有且仅有一条边连接的三元组仅计算了一次,两条边相连的三元组计算了两次,三条边相连的三元组计算了三次。
  • 第三步中,有两条边相连的二元组计算了一次;三条边相连的三元组计算了三次。
  • 第四步中,三条边连接的三元组都仅计算了一次。

因此,通过你聪明的大脑,你一定可以发现,答案就是 S 1 − S 2 + S 3 − S 4 S_1-S_2+S_3-S_4 S1S2+S3S4

就这么开心的写代码吧。小心细节不要 WA 哦。

Code \color{blue}{\text{Code}} Code

typedef unsigned long long ll; const int N=2e5+100; int n,m,A,B,C,u[N],v[N];
ll ans;
vector<int> edge[N],e[N];ll pre_sqr(int n){return 1ull*n*(n+1)/2*(2*n+1)/3;
}
ll pre_sum(int n){return 1ull*n*(n+1)/2;
}
ll get_sum(int a,int b){int t=(b-a+1);return 1ull*(a+b)*t/2;
}ll get_all(){ll cnt,tmp1,tmp2,res=0;for(int j=2;j<n;j++){
//		从 0 到 j-1 中选出两个数int i=j-1;//写着简单 cnt=pre_sum(i);tmp1=1ull*i*pre_sum(i-1)-pre_sqr(i-1);tmp2=pre_sqr(i);res+=1ull*tmp1*A;res+=1ull*tmp2*B;res+=1ull*cnt*C*j;}return res;
}//第一步ll get_minus(){ll res=0;for(int i=1;i<=m;i++){if (u[i]>v[i]) swap(u[i],v[i]);//(x, u[i], v[i])if (u[i]>0)res+=1ull*A*pre_sum(u[i]-1)+1ull*u[i]*(1ull*B*u[i]+1ull*C*v[i]);//(u[i], x, v[i])if (v[i]-u[i]>1)res+=1ull*B*get_sum(u[i]+1,v[i]-1)+(1ull*A*u[i]+1ull*C*v[i])*(v[i]-u[i]-1);//(u[i], v[i], x)if (v[i]<n-1)res+=1ull*C*get_sum(v[i]+1,n-1)+(1ull*A*u[i]+1ull*B*v[i])*(n-1-v[i]);} return res;
}//第三步int ind[N],vistime[N];ll get_triple(){ll res=0;for(int i=1;i<=m;i++){++ind[u[i]];++ind[v[i]];}for(int i=1;i<=m;i++){if (ind[u[i]]>ind[v[i]]) swap(u[i],v[i]);else if ((ind[u[i]]==ind[v[i]])&&(u[i]>v[i])) swap(u[i],v[i]);edge[u[i]].push_back(v[i]);}memset(vistime,-1,sizeof(vistime));//注意这里,不然可能会多算出一些三元组for(int i=0;i<n;i++){for(int j:edge[i]) vistime[j]=i;for(int j:edge[i])for(int k:edge[j])if (vistime[k]==i){//因为这里int t[]={i,j,k};sort(t,t+3);res+=1ull*A*t[0]+1ull*B*t[1]+1ull*C*t[2];}}return res;
}//第四步,三元环计数的板子ll get_add(){for(int i=1;i<=m;i++){e[u[i]].push_back(v[i]);e[v[i]].push_back(u[i]);}ll res=0;for(int u=0;u<n;u++){e[u].push_back(u);sort(e[u].begin(),e[u].end());int x=e[u].size()-1;if (x==0) continue;for(int i=0;i<=x;i++){int v=e[u][i];if (v<u)res+=1ull*A*v*(x-i-1)+1ull*B*v*i;else if (v>u)res+=1ull*B*v*(x-i)+1ull*C*v*(i-1);elseres+=1ull*v*(1ull*(x-i)*(x-i-1)/2*A+1ull*B*(x-i)*i+1ull*i*(i-1)/2*C); }}//第二步return res;
}int main(){n=read();m=read();A=read();B=read();C=read();for(int i=1;i<=m;i++){u[i]=read();v[i]=read();}ans=get_all()-get_minus()+get_add()-get_triple();cout<<ans<<endl;return 0;
}

最后,Good luck to you。

http://www.dtcms.com/wzjs/368304.html

相关文章:

  • 郑州网站建设公司头条搜索站长平台
  • 做一个b2c网站怎样做广州百度网站排名优化
  • 海口网站建设高端跨境电商
  • 佛山市企业网站seo联系方式百度收录哪些平台比较好
  • 宣城公司做网站推广普通话宣传周
  • 网站运营专员做什么逆冬黑帽seo培训
  • gta5房产网站正在建设竞价外包推广专业公司
  • 手机网站关闭窗口代码百度竞价什么意思
  • 四川移动端网站建设推广软文发布平台
  • 名表网站朋友圈广告30元 1000次
  • 深圳网站建设方维百度域名注册官网
  • 网站标题更改后要多久才能收录网络营销有哪几种方式
  • 沧县网站制作价格百度seo排名优化如何
  • 做网站外包公司国内最新消息新闻
  • 网站的服务器怎么做网站竞价推广
  • 大形电商网站开发费用热搜榜排名今日第一
  • 网站的制作什么网站都能打开的浏览器
  • 有没有做q版头像的网站企业的网络推广
  • 做百度推广的网站吗怎么推广产品最有效
  • 百度优化关键词seo人员培训
  • wordpress面包屑导航不要子分类网站优化公司推荐
  • 美国昨天对中国宣布了什么自己怎么优化网站排名
  • 东阳网站建设深圳市前十的互联网推广公司
  • 建站宝盒创业经历领硕网站seo优化
  • jeecg 做网站模板建站和开发网站区别
  • 天元建设集团有限公司是国企吗搜索seo是什么意思
  • 昭通市住房和城乡建设局网站百度快速收录接口
  • 成都哪家做网站好广告网站推荐
  • 酒泉网站建设百度广告开户
  • 品牌网站建设网搭建自己的网站