欧拉

混合图欧拉回路

心已入冬 提交于 2019-12-02 06:11:43
•参考资料 [1]: 混合图欧拉回路 •前提知识 欧拉回路:每条边恰好只走一次,并能回到出发点的路径 判断方法: 无向图:每个顶点的度数都是偶数,则存在欧拉回路。 有向图:每个节顶点的入度都等于出度,则存在欧拉回路。 •混合图欧拉回路 判断方法: 第一步:把该图的无向边随便定向,计算每个点的入度和出度。 如果有某个点出入度之差为奇数,那么肯定不存在欧拉回路。 因为欧拉回路要求每点 (入度 = 出度),也就是总度数为偶数,存在奇数度点必不能有欧拉回路。 第二步:经过第一步筛选现在每个点入度和出度之差均为偶数。 那么将这个偶数除以2得 x ( x = 入度 - 出度 )。 也就是说对于每一个点,只要将|x|条边改变方向 (入>出就是入变成出,出>入就是出变成入),就能保证 出 = 入。 如果每个点都是 出 = 入,那么很明显,该图就存在欧拉回路。 计算方法:网络流 有向边是不能改变方向的,对方向改变并没有用处,所以删去。 建超级源点$s$和超级汇点$t$,统计所有点的 入度出度之差/2 得$x$, 对于 $x > 0$ 的点,加边$(s, i, x)$;对于 $x< 0$ 的点,加边$(i, t, -x)$ 对原图(即随便定向的图)中的每条边$(i, j)$,在网络中加边$(i, j, 1)$。 之后,察看是否有满流的分配。有就是能有欧拉回路,没有就是没有。 欧拉回路 查看流值分配

欧拉函数(欧拉定理)与费马小定理

♀尐吖头ヾ 提交于 2019-12-02 03:39:06
详细的证明忽略。只记录使用场景。 欧拉函数 欧拉函数 是小于等于 n 的正整数中与 n 互质的数的个数。 欧拉定理 使用条件为a和n互质,即gcd(a,n)=1 对于任意互素的 ,有 方法1:求单个数的欧拉函数 我们首先应该要知道欧拉函数的通项公式:φ(n)=n*(1-1/p1)*(1-1/p2)*(1-1/p3)*(1-1/p4)…..(1-1/pn),其中pi为n的质因数 long long eular(long long n) { long long ans = n; for(int i = 2; i*i <= n; i++) { if(n % i == 0) { ans -= ans/i; //等价于通项,把n乘进去 while(n % i == 0) //确保下一个i是n的素因数 n /= i; } } if(n > 1)ans -= ans/n; //最后可能还剩下一个素因数没有除 return ans; } 方法2: 打表求欧拉函数 void euler() { for(int i=2;i<maxn;i++){ if(!phi[i]) for(int j=i;j<maxn;j+=i){ if(!phi[j]) phi[j]=j; phi[j]=phi[j]/i*(i-1); } } } 方法3: 欧拉筛素数同时求欧拉函数 void get_phi() { int i,

欧拉序动态维护树直径

。_饼干妹妹 提交于 2019-12-01 06:18:16
https://zhuanlan.zhihu.com/p/84236967 https://www.cnblogs.com/TinyWong/p/11260601.html 一个月过去了,我还是没有学动态点分治... 欧拉序保存了每个节点进入和返回的情况,$n$ 个结点的树,欧拉序列长度为 $2n - 1$。 两个结点的LCA就是它们在欧拉序中出现的位置的区间中,深度最小的那个结点。 对于边权为正的树,上面定义中的深度也可以换成到根的距离。 对于修改一个边权,就是区间修改。这没啥好说的。 对于查询直径,一棵树的直径就是 $max_{u, v}{dis[u] + dis[v] - min(dis[p])}$,也就是一个区间的左右端点的距离之和减去区间之间的最小距离。 来源: https://www.cnblogs.com/Mrzdtz220/p/11664538.html

ACM周末学习总结

风流意气都作罢 提交于 2019-12-01 03:42:08
今天看了一些题,但着实不是好题,只是对知识的应用,有欧拉定理,扩展欧几里得,容斥定理,博弈论等内容,就没有记录下来。但是当我反问自己学到了什么,我感觉是很模糊的,首先是因为题目本身比较简单,基本上看出用什么知识点解决就可以直接套板子,关于板子的变形比较少,需要注意的就只是特判0和1等。 以前做题时接触过切比雪夫定理,那道题给出了切比雪夫定理的百度百科,但是我没用上。直接自己手推得公式推了老久做的,现在一看,这个定理完全可以作为知识的储备。 还有新知识卡特兰数,开始搞吧。 来源: CSDN 作者: 狠人王 链接: https://blog.csdn.net/weixin_43238423/article/details/102247272

Day14

杀马特。学长 韩版系。学妹 提交于 2019-11-30 06:34:25
luogu_p1341 欧拉路径/欧拉回路 一道板子题,顺带好好复习了欧拉路径和回路,当然只是无向图的。 luogu_p5018 递归水题 18的pj_T4,树的递归,水一水就过去了。 luogu_p2615 水题 水的一B. 来源: https://www.cnblogs.com/backkom-buaa/p/11569510.html

【数论】——欧拉定理

淺唱寂寞╮ 提交于 2019-11-29 12:00:48
今天摸鱼看到一道题: 这不就快速幂裸题吗?? 然后一看数据范围: ???这个b的范围吓到我了 经过一番学习,原来这道题考察的是: 欧拉定理&扩展欧拉定理 证明略过,直接上结论: (图源OI wiki) 那么这道题就是先处理出欧拉函数,再根据扩展欧拉求解即可。注意b要 边输入边取模 。 欧拉函数的处理方式:   类似于线性筛素数,看标程即可,很好理解。 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const ll M=1e6+10; 5 ll ans[M],phi[M]; 6 ll cnt; 7 ll m,a,b; 8 void Eulersieve(){ 9 phi[1]=1; 10 for(ll i=2;i<=m;i++){ 11 if(!phi[i]){ 12 for(ll j=i;j<=m;j+=i){ 13 if(!phi[j]) phi[j]=j; 14 phi[j]=phi[j]/i*(i-1); 15 } 16 } 17 } 18 } 19 ll read(){ 20 ll x=0,f=1; 21 char c=getchar(); 22 while(!isdigit(c)){ 23 if(c=='-') f=-1; 24 c=getchar(); 25 } 26

欧拉定理

Deadly 提交于 2019-11-29 04:57:32
一. 分解质因数   每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,把一个合数用质因数相乘的形式表示出来,叫做分解质因数。如30=2×3×5 。分解质因数只针对合数。求一个数的质因数,要从最小的质数除起,一直除到结果为质数为止。分解质因数的算式叫短除法,和除法的性质相似,还可以用来求多个数的公因式。(百科) const int MAXN = 100010; int prime[MAXN] = {0}; bool isprime[MAXN] = {0}; int id = 0; void getPrime() //素数筛法 { for (int i = 2; i < MAXN; i++) { if (!isprime[i]) prime[id++] = i; for (int j = 0; j < id && i * prime[j] <= MAXN && i * prime[j] != 0; j++) isprime[i * prime[j]] = 1; } } void getPrimeFactor(int n) //分解质因数,递归输出素因子 { getPrime(); if (n < 2) return; if (!isprime[n]) cout << n; else { for (int i = 0; prime[i] < n; i++) if

MATLAB--190828--欧拉计划(八)

感情迁移 提交于 2019-11-28 21:45:59
写在最前面 本人为初学MATLAB编程的小菜鸟,本博客作为阶段的一个小练习,欢迎大家与我交流! 每周一句 快就是慢,慢就是快,当感到生活的无助时,此时正在上坡的路上;但当自己感觉活得很轻松时,可能已经在走下坡路了。保持积极的心态拥抱每一天,加油,早日成为一个大菜鸡! 题目八 题目的意思就是求这1000个数当中连续13位数相乘的最大值。 思路 刚开始看到一连串的数,有点懵逼。仔细想想, 最重要的还是如何取出13位数并进行比较,直到找到最大值 。我编写的程序第一步将1000个数当成字符串来处理,主要是因为这样做可以避免因为值过大而无法表示出来;第二步是从1-(1000-12),每次取出13个数,并将13个数做乘积,我觉得这是程序最难的部分。可以采用A=a(i:(i+12))每次取13个字符,通过B=str2num(A(:))'将字符串转变为数组(Ps:这一步操作的原因可以理解为:A(:)将一行字符串变成一列字符串,再通过str2num变成一列的数组,通过’转置成为一行数组),再通过prod(B)就可以得出五个元素的乘积。最后,一直比较下去就可以得到最大值。 代码块 disp('求1000个数中13位连续数乘积的最大值:') clear; %将一串很长的字符串分行书写的方法a=[''...''...] a=[

图论之欧拉图

柔情痞子 提交于 2019-11-28 15:59:07
欧拉路径/欧拉回路 欧拉路径是一条经过图中所有边且只经过一次的路径(类似于一笔画问题); 欧拉回路的话就是起点和终点相同的欧拉路径 欧拉通路(欧拉路径) :S点到T点的路径经过图中所有的边,有且仅有一次 欧拉回路 :就是起点和终点相同的欧拉路径 欧拉图 :通过图(无向图或有向图)中所有边且每边仅通过一次通路,相应的回路称为欧拉回路 下图p1,p2都不是欧拉图:因为不存在有一条路径能通过所有边且边只经过一次 而下图可以被称为欧拉图: 性质 1.无向连通图 G 是欧拉图,当且仅当 G 不含奇数度结点( G 的所有结点度数为偶数); 2.无向连通图G 含有欧拉通路,当且仅当 G 有零个或两个奇数度的结点; 3.有向连通图 D 是欧拉图,当且仅当该图为连通图且 D 中每个结点的入度=出度; 4.有向连通图 D 含有欧拉通路,当且仅当该图为连通图且 D 中除两个结点外,其余每个结点的入度=出度,且此两点满足 deg-(u)-deg+(v)=±1 。(起始点s的入度=出度-1,结束点t的出度=入度-1 或两个点的 入度=出度); 5.一个非平凡连通图是欧拉图当且仅当它的每条边属于奇数个环; 6.如果图G是欧拉图且 H = G-uv,则 H 有奇数个 u,v-迹仅在最后访问 v ;同时,在这一序列的 u,v-迹中,不是路径的迹的条数是偶数。 求法 对于 无向图 满足以下条件说明该图为 无向欧拉图

欧拉路

这一生的挚爱 提交于 2019-11-28 13:10:46
欧拉路径 定义:一幅图中,一条刚好通过了 所有边 一次的路径。 判定条件: 有且仅有两个点度数为奇,其余为偶 (那么必然存在一条欧拉路径,从度数为奇的点开始dfs,每次把遍历到的边删去,如果边删完就加入队列,最后队列里的数就是欧拉路径依次走过的节点) 常考类型:欧拉路径计数。 欧拉回路 定义:源点与汇点相同的欧拉路径。 判定条件: 对于有向图:每个节点的入度等于出度。 对于无向图:每个节点的度数为偶 查找方法: 因为是回路,所以回路上的点都可以作为源点和汇点,即所有点均可,找一个度数不为零的点开始dfs就好。 来源: https://www.cnblogs.com/wwlwQWQ/p/11408398.html