codeforces716E 715C 樹上點分治

2022-05-16 21:36:08 字數 1662 閱讀 8492

點分治...有很多細節的點分治題

我用了尤拉函式+費馬小定理求的非質數乘法逆元

然後發現題目保證和10互質....不需要這麼麻煩,其實直接套擴歐求逆元就行了

這題依然是滿足可減性的資訊,所以每一步容斥一次就行

#include#define endl '\n'

#define ll long long

#define ull unsigned long long

#define fi first

#define se second

#define mp make_pair

#define pii pair#define all(x) x.begin(),x.end()

#define io ios::sync_with_stdio(false)

#define show(x) cout<<#x<<"="<=a;--ii)

#define forn(i,x) for(int i=head[x];i;i=e[i].next)

using namespace std;

const int maxn=1e5+10,maxm=2e5+10;

const int inf=0x3f3f3f3f;

const int mod=1e9+7;

const double pi=acos(-1.0);

int casn,n,k;

ll val[maxn],pw[maxn],phi,inv[maxn],m;

ll pow_mod(ll a,ll b,ll c=m,ll ans=1)

return ans;

}ll euler(ll n)

}if(a>1) res=res/a*(a-1);

return res;

}void init()

}class graphe[maxm];

int head[maxn],nume,n,sz[maxn],maxt,stree[maxn];

void add(int a,int b,ll c=0);head[a]=nume;}

int vis[maxn],num[maxn],all,mid;

void getmid(int now=1,int pre=0)

int tmp=max(sz[now]-1,all-sz[now]);

if(maxt>tmp) maxt=tmp,mid=now;

}//base

ll ans,in[maxn],out[maxn];

mapcnt;

void init(int n)

ll getout(int now,int pre,int d)

sum+=cnt[out[now]];

ll tmp=(m-in[now])%m*inv[d]%m;

if(out[now]==tmp) sum--;

return sum;

} void getin(int now,int pre,int d)

} ll getans(int now,int d=0)

void divide(int now)

} void solve()

}g;int main()

g.solve();

cout

}

Codeforces 976E 題解報告

1 當把所有的倍數2 a都加到同一health上,health增加的最多 2 先計算每乙個creature的hp dmg,按該值對所有的creature排序 再求和,i include using namespace std const int n 200 1000 9 int hp n dmg n...

codeforces 1030E 暴力 思維)

題目 題意 給定一些數,可將區間 l r 中某些數的二進位制位的1的位置更換,使得最終區間所有數異或和為0,求這樣的區間個數。思路 在那裡瞎dp了好久,wa的很徹底,借鑑了一下別人的思路。區間合法的條件是 這個區間1的個數為偶數,並且區間中二進位制位1最多的乙個數的二進位制個數小於等於和的一半。我們...

Codeforces 1270E 構造 數學

有 n 個二維平面上的點,每兩個點之間連一條線段,將這些點劃分為兩個非空的集合 a b 同乙個集合內的兩點之間線段用黃色標註,不同集合的兩點之間線段用藍色標註,使距離相同的線段顏色相同。先將所有點的座標以其中乙個點作為原點轉化一下,使其中必定有乙個點是 0,0 然後將所有點按奇偶分為四組 0代表偶數...