题解
B - 高斯消元模板
题目:求A^B mod C.
于是又用了欧拉降幂。。。看这里
C - LCA(补题)
题目:给你一颗树,每条边有边权。
求将三个连接起来的最小代价。
- LCA + 思维
- 相对于DAY24的A题,这里所求的是
(fs(u, v)+fs(v, w)+fs(w, u))/2
(fs函数得到的是两点间的最短路径),之所以相加除以2,是因为每个点到公共最近祖先的路径被加了两次。
D - 二元组
题目:输入一个N值,判断有多少个二元组(x, y)满足1 <= x, y <= N, 且x, y互质。
提示:N=2时,有三个二元组,(1,1) , (1,2) , (2,1).
- 求多个欧拉函数
- 模板稍微修改一下就好
- 代码
#include <iostream>
#include <string.h>
using namespace std;
const int mx = 50010;
int a[mx];
int main()
{
memset(a, 0, sizeof a);
for(int i=2; i<= mx; i++)
{
if(a[i] == 0)
{
for(int j=i; j<=mx; j+=i)
{
if(a[j]==0)
a[j] = j;
a[j] = a[j] / i * (i-1);
}
}
}
int n;
while(cin >> n && n)
{
long long sum(0);
for(int i=1; i<=n; i++){
sum += a[i];}
cout << sum * 2 + 1<< endl;
}
return 0;
}
E - 皮皮的项链
直接看这个吧(B题)