[杂题 计数 图论] Codeforces 51E. Pentagon
2017-11-08 20:12
375 查看
挺烦的题…..很容易wa…
总之就是求出 Bi,j 表示 i 到 j ,走两步的方案,Ci,j 表示走三步。
然后 ∑Bi,j∗Ci,j。然后会有不合法的和重复的…
不合法的大概是 一个三角形多出一个脚…或者就是一个三角形… 在纸上大力分类讨论一下,把它们都扣去就好了。
参考了网上dalao的实现。
总之就是求出 Bi,j 表示 i 到 j ,走两步的方案,Ci,j 表示走三步。
然后 ∑Bi,j∗Ci,j。然后会有不合法的和重复的…
不合法的大概是 一个三角形多出一个脚…或者就是一个三角形… 在纸上大力分类讨论一下,把它们都扣去就好了。
参考了网上dalao的实现。
#include<cstdio> #include<algorithm> using namespace std; typedef long long LL; const int maxn=705; int n,m,d[maxn],A[maxn][maxn],B[maxn][maxn],C[maxn][maxn]; LL ans; int main(){ freopen("cf51E.in","r",stdin); freopen("cf51E.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ int x,y; scanf("%d%d",&x,&y); d[x]++; d[y]++; A[x][y]=A[y][x]=1; } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) B[i][j]+=A[i][k]*A[k][j]; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) C[i][j]+=A[i][k]*B[k][j]; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) ans+=(LL)B[i][j]*C[i][j]; ans/=10; for(int i=1;i<=n;i++) for(int j=1;j<=i-1;j++) for(int k=1;k<=j-1;k++) if(A[i][j]&&A[i][k]&&A[j][k]) ans-=d[i]+d[j]+d[k]-3; printf("%lld\n",ans); return 0; }
相关文章推荐
- CodeForces - 19E Fairy(图论 + DP)
- codeforces - 734E - Anton and Tree(图论 树)
- CodeForces - 816B(区间计数)
- Codeforces 15E Trangles (计数)
- [CodeForces 300C Beautiful Numbers]组合计数
- 【Codeforces 766E】 Mahmoud and a xor trip 【二进制计数】
- CodeForces 369 div2 D Directed Roads 图论 数论
- Codeforces-396A - On Number of Decompositions into Multipliers-组合计数
- codeforces Road Map 图论,水。
- Codeforces 22E(图论)
- Codeforces 598A Tricky Sum 【计数】
- CodeForces 25C Roads in Berland(图论-最短路径)
- Codeforces 913F Strongly Connected Tournament 期望dp+图论
- CodeForces 617B B. Chocolate【计数+累乘】
- codeforces 简单计数问题收集
- Codeforces 439E Devu and Birthday Celebration(计数问题)
- codeforces 707 B. Bakery【图论】
- Codeforces 500D New Year Santa Network(树 + 计数)
- codeforces 176B Word Cut (计数dp)
- codeforces 789 D. Weird journey (欧拉路计数)