图论

【图论】2 图的建立与遍历

最后都变了- 提交于 2020-01-01 12:25:44
在c++中我们应如何表示一张图呢? 表示完成后又应如何调用呢? 1.图的建立 我们有许多方法存住一张图,在csp-s考试范围常用的方法有:   1.邻接矩阵  2.数组模拟链表(前向星)   (当然还有许多其他方法) 邻接矩阵 理解很简单: 对于一个二维数组 a [i] [j],a [i] [j]的值即为 点 i 到点 j 的边的边权。 就是说我们总是将 从i 到 j 的单向边的边权赋给 用以存这个边的二维数组的对应位置 来源: https://www.cnblogs.com/rtrtrt/p/12128617.html

2017.7.11 图论测试

旧巷老猫 提交于 2019-12-31 21:43:59
Digital collectible card games have become very popular recently. So Vova decided to try one of these. Vova has n cards in his collection. Each of these cards is characterised by its power p i , magic number c i and level l i . Vova wants to build a deck with total power not less than k , but magic numbers may not allow him to do so — Vova can't place two cards in a deck if the sum of the magic numbers written on these cards is a prime number. Also Vova cannot use a card if its level is greater than the level of Vova's character. At the moment Vova's character's level is 1. Help Vova to

Hdu图论最短路基础题。

徘徊边缘 提交于 2019-12-31 03:43:24
HDU 最短路题目: 1. 题号: 2544 难度: 1 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=2544 分析小结:入门级别,甚至 floyd 都可以过。 2. 题号: 2066 难度: 2 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=2066 分析小结:也是入门级别,求起点集合到终点集合的最短路。 3. 题号: 2112 难度: 3 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=2112 分析小结:如果会用 map 容易,那么这题就是一道十足的水题,我用 dijkstra O(n^2) 的算法过的,需注意如果两地名相同,则输出 0. 4. 题号: 1874 难度: 1 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1874 分析小结:这题很蛋疼,出题人有点阴,注意:到两村的路线不止一条。 AC 它吧! 5. 题号: 1385 难度: 3 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1385 分析小结:是一道典型的 floyd ,但需要输出路径(而且是字典序最小的路径),这题难就难在这两点上了,我用 dijkstra 做

codechef Sum of Cubes 图论

扶醉桌前 提交于 2019-12-31 03:43:03
正解:图论+数学 解题报告: 先放个传送门QwQ 然后放下题目大意?就说给定简单图,无自环或重边,然后求(∑e[i][j]) k , i,j∈S,S 为点集的子集 然后因为k的取值只有[1,3],所以这里分类讨论说下这题QAQ 首先k=1 k=1就比较简单昂,可以直接考虑每条边的贡献,所以就直接考虑如果这个边有贡献,一定是它的两个端点被选了,然后其他点随便选,所以答案就m*2 n-2 ,做完辣 然后k=2 考虑组合意义?所以平方就相当于是说,有顺序地选两条边,求这个图包含了这两条边的方案数 那就和k=1一样的考虑,分情况讨论一下就好嘛 如果两条边是同一条边,就2 n-2 如果它们有一个共同的端点,就2 n-3 如果他们麻油共同的端点,就2 n-4 然后就做完辣 还是说下统计边趴QAQ 首先是同一条边显然是有m种 然后有一个共同的端点可以通过枚端点,每个端点会有du[i]*(du[i]-1)的贡献 然后麻油共同的端点就是总数-同一条边的方案-有共同顶点的方案 over 最后就k=3 和k=2差不多,只是说要求的是,选三条边 然后就熟悉的分类讨论 因为考虑到不同的方案的差别主要在于是×2的几次方,也就是说只和这些边的端点个数有关,所以依然按端点数分类讨论 首先两个端点,就同一条边,一样的 三个端点,就有两条边是一条边还有一条边是和他们同端点的,或者是个三元环 四个端点

【网络流】【图论】【模板】网络最大流(luogu P3376)

≡放荡痞女 提交于 2019-12-28 10:04:09
前言 我枯了 题目: 数据: 思路: 先讲一些概念性的定义 名称 定义 原点 只有流出的点 汇点 只有流入的点 流量 一条边流过的量 容量 一条边的最大流量 残量 容量 - 流量 然后在看基本性质 1.对于任意一个“管道”流量 < = <= < = 容量 这个就很显然没什么好说 2.每个点(除原点和汇点)的入流和出流相等,就是原点流出多少就会有多少流入汇点,这个也很显然 3.对于一条有向边(u,v)k[u][v] = -k[v][u] 其实就是 最后来看一下算法 我们只学了dinic和一种慢到炸的算法 显然用dinic,毕竟快 这个算法就是每次以原点bfs求出每个边的编号,表示从原点到i通过至少几条残量大于0的边,再跑dfs找增广路并增广,如果没有增广路,返回步骤一,如果bfs没到汇点证明算法结束 C o d e Code C o d e : # include <queue> # include <cstdio> # include <iostream> # include <cstring> const long long INF = 1 << 29 ; using namespace std ; long long n , m , s , y , t ; long long h [ 100000 ] , dis [ 100000 ] ; long long tt ;

你搞图论有毛用啊!!

拥有回忆 提交于 2019-12-27 07:13:26
你搞图论有毛用啊!! 搞了你也不一定能看懂! 看懂了你也不一定能深刻理解! 理解了你也不一定完全敲出代码!! 敲出代码考试的时候也不一定能出图论的题!! 出了图论的题你也不一定能看出来!! 看出来你也不一定能按要求敲出来! 按要求敲出来你也不一定能跑出结果!! 跑出结果你也不一定能AC!! 能AC你也不一定能拿到奖!! 拿到奖你也不一定能进区域赛! 进了区域赛指定就是被虐!! 那你搞图论还有毛用啊!!!!! 来源: https://www.cnblogs.com/javawebsoa/archive/2013/05/13/3076950.html

[图论]最短网络:kruskal

我只是一个虾纸丫 提交于 2019-12-22 08:28:00
最短网络 目录 最短网络 Description Input Output Sample Input Sample Output 解析 代码 Description 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了用最小的消费,他想铺设最短的光纤去连接所有的农场。你将得到一份各农场之间连接费用的列表,你必须找出能连接所有农场并所用光纤最短的方案。每两个农场间的距离不会超过100000 Input 第一行: 农场的个数,N(3<=N<=100)。 第二行…结尾: 后来的行包含了一个N*N的矩阵,表示每个农场之间的距离。理论上,他们是N行,每行由N个用空格分隔的数组成,实际上,他们限制在80个字符,因此,某些行会紧接着另一些行。当然,对角线将会是0,因为不会有线路从第i个农场到它本身。 Output 只有一个输出,其中包含连接到每个农场的光纤的最小长度。 Sample Input 4 0 4 9 21 4 0 8 17 9 8 0 16 21 17 16 0 Sample Output 28 解析 这道题一看就是最小生成树,有两种方法,分别为 普里姆算法( prim ) 和 克鲁斯卡尔( kruskal ) 本题解使用的是 kruskal

【图论】【最小生成树】USACO 3.1 Agri-Net 最短网络 (最小生成树)

不问归期 提交于 2019-12-22 08:13:28
Description 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了用最小的消费,他想铺设最短的光纤去连接所有的农场。你将得到一份各农场之间连接费用的列表,你必须找出能连接所有农场并所用光纤最短的方案。每两个农场间的距离不会超过100000 Input 第一行: 农场的个数,N(3<=N<=100)。 第二行…结尾: 后来的行包含了一个N*N的矩阵,表示每个农场之间的距离。理论上,他们是N行,每行由N个用空格分隔的数组成,实际上,他们限制在80个字符,因此,某些行会紧接着另一些行。当然,对角线将会是0,因为不会有线路从第i个农场到它本身。 Output 只有一个输出,其中包含连接到每个农场的光纤的最小长度。 Sample Input 4 0 4 9 21 4 0 8 17 9 8 0 16 21 17 16 0 Sample Output 28 解题思路 题目:给你一个无向图,求最小生成树 输入:一个无向图 过程:求最小生成树 输出:树边和 (说这么多,其实我想表达这题就是个最小生成树模板) 欢快推荐 prim算法 和 kruskal算法 (你们不想看,我也不想解释) 把prim的注释复制了过来 #include < iostream >

[图论]剑鱼行动:kruskal

…衆ロ難τιáo~ 提交于 2019-12-22 04:39:35
剑鱼行动 目录 剑鱼行动 Description Input Output Sample Input Sample Output 解析 难点 代码 Description 给出N个点的坐标,对它们建立一个最小生成树,代价就是连接它们的路径的长度,现要求总长度最小。N的值在100以内,坐标值在[-10000,10000].结果保留二位小数 Input N个点 ,N个点的坐标 Output 连接它们的最短路径的长度 Sample Input 5 ---------------5个点 0 0 ---------------5个点点的坐标 0 1 1 1 1 0 0.5 0.5 Sample Output 2.83 解析 这道题一看就是最小生成树,有两种方法,分别为 普里姆算法( prim ) 和 克鲁斯卡尔( kruskal ) 本题解使用的是 kruskal 假设连通网G=(V,E),则令最小生成树的初始状态为只有n个顶点而无边的非连通网,图中每个顶点自成一个连通分量。在E中选择代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中,否则舍去此边而选择下一条代价最小的边。依此类推,直至T中所有顶点都在同一连通分量上为止。 难点 题目给出的可能是小数,所以就有了我们的读入方式 aj[i][1]储存x坐标,a[j][2]储存y坐标 for ( int i = 1 ; i

【图论】【最小生成树】

一世执手 提交于 2019-12-22 01:34:18
Description 给出N个点的坐标,对它们建立一个最小生成树,代价就是连接它们的路径的长度,现要求总长度最小。N的值在100以内,坐标值在[-10000,10000].结果保留二位小数 Input 5 ---------------5个点 0 0 ---------------5个点点的坐标 0 1 1 1 1 0 0.5 0.5 Output 2.83 Sample Input Sample Output Source zju 解题思路 这个被老师严重删略题目,真是看得我一脸懵逼。然后我复制模板时,忘记把输入改成实数型。。。 坚强围笑 😐 其实还是一道模板,于是我把 模板 找出来复制上去。但是两点之间的距离要自己求,于是我打开了 baidu ,把公式抄了上去 :) #include < iostream > #include < cstdio > #include < cstring > #include < cmath > using namespace std ; const int INF = 0x7fffffff ; int v [ 200 ] , n ; double Gun , dis [ 200 ] , x [ 200 ] , y [ 200 ] , a [ 200 ] [ 200 ] ; void prim ( ) { //整个过程最好看看我的模板 dis