[习题练习] 提高组综合训练1

提高组综合训练1

一个数的平方的最后n位只与原数的最后n位有关

\(\text{exgcd}\)

\(\text{exgcd(a, b, x, y)}\)表示\(ax+by=gcd(a,b)\)的一组解

\(\text{b} = 0\)时 原式为\(\text{ax+by=a}\) 那么必有特解\(\text{x = 1, y = 0}\)
否则当\(\text{b} != 0\)时 递归\(exgcd(b, a%b, x, y)\) 那么就有等式\(x'b + y'(a - a / b * b)=\gcd(a \mod b, b) = \gcd(a, b)\)
那么\(x'b + y'(a - a / b * b) = y'a - b(x' - y'*a/b)=\gcd(a, b) = xa + yb\)
那么\(x = y' b= x' - y'*a/b\) 递归下去 可以得到解

inline void exgcd(ll a, ll b, ll &x, ll &y) {
    if(b == 0) {
        x = 1; y = 0;
        return ;
    }
    exgcd(b, a % b, x, y);
    ll p = x;
    x = y;
    y = p - (a / b) * y;
}

欧拉路

欧拉路:欧拉路是指从图中任意一个点开始到图中任意一个点结束的路径,并且图中每条边通过的且只通过一次。

欧拉回路:欧拉回路是指起点和终点相同的欧拉路。

无向连通图存在欧拉路的条件:

  所有点度都是偶数,或者恰好有两个点度是奇数,则有欧拉路。若有奇数点度,则奇数点度点一定是欧拉路的起点和终点,否则可取任意一点作为起点。

有向连通图存在欧拉路的条件:

  每个点的入度等于出度,则存在欧拉回路(任意一点有度的点都可以作为起点)
  除两点外,所有入度等于出度。这两点中一点的出度比入度大,另一点的出度比入度小,则存在欧拉路。取出度大者为起点,入度大者为终点。
inline void dfs(int u) {
    for(int i = head[u]; i; i = edge[i].nxt) {
        if(!edge[i].vis) {
            edge[i].vis = true;
            edge[i ^ 1].vis = true;
            dfs(edge[i].to);
            ans.push_back(i);
        }
    }
}
posted @ 2020-08-13 13:18  Hock  阅读(131)  评论(0编辑  收藏  举报