
acm
她与伞皆过客
何须浅碧深红色,自是人间第一流。
展开
-
ACM网络流专题1-基本概念
1.流网络流网络是一个有向图G<V,E>,其中有两个特殊点s,t∈V,分别为源点和汇点。G中每一条边有一个≥0的权值,称作边的容量,边(u,v)容量可记做c(u,v)。源点相当于一个水源,汇点相当于一个大海,中间的边和点相当于河流水道,水从水源流出,流经河道,流向大海。容量描述的就是这些河流水道的宽度/深度/etc.。为了简化问题,我们假设若存在边(u,v)∈E,则不存在(v,u)∈E 。其实我们也有一种办法消除这种边,只需要将(v,u) 拆成(v,...原创 2021-08-07 15:10:21 · 505 阅读 · 0 评论 -
Acwing 2171-EK求最大流
//EK算法#include<bits/stdc++.h>using namespace std;const int N=1010,M=20010,INF=1e8;int n,m ,S,T;int h[N],e[M],f[M],ne[M],idx;int d[N],pre[N];bool st[N];void add(int a,int b,int c){ e[idx]=b,f[idx]=c,ne[idx]=h[a],h[a]=idx++; e[idx.原创 2021-07-12 11:00:18 · 178 阅读 · 0 评论 -
Acwing 861-二分图的最大匹配
给定一个二分图,其中左半部包含n1个点(编号1∼n1),右半部包含n2 个点(编号1∼n2),二分图共包含m条边。数据保证任意一条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。二分图的匹配:给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。输入格式第一行包含三个整数n1、n2...原创 2021-04-30 18:57:29 · 349 阅读 · 1 评论 -
Acwing 860-染色法判定二分图
给定一个n个点m条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。输入格式第一行包含两个整数n和m。接下来m行,每行包含两个整数u和v,表示点u和点v之间存在一条边。输出格式如果给定图是二分图,则输出Yes,否则输出No。数据范围1≤n,m≤1e5输入样例:4 41 31 42 32 4输出样例:Yes#include<bits/stdc++.h>using namespa...原创 2021-04-29 16:07:13 · 195 阅读 · 0 评论 -
Acwing 859-
给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。给定一张边带权的无向图G=(V,E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|。由V中的全部n个顶点和E中n−1条边构成的无向连通子图被称为G的一棵生成树,其中边的权值之和最小的生成树被称为无向图G的最小生成树。输入格式第一行包含两个整数n和m。接下来m行,每行包含...原创 2021-04-29 14:53:48 · 174 阅读 · 0 评论 -
Acwing 858-Prim算法求最小生成树
给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。给定一张边带权的无向图G=(V,E),其中VV表示图中点的集合,EE表示图中边的集合,n=|V|,m=|E|。由V中的全部n个顶点和E中n−1条边构成的无向连通子图被称为G的一棵生成树,其中边的权值之和最小的生成树被称为无向图G的最小生成树。输入格式第一行包含两个整数n和m。接下来m行,每...原创 2021-04-29 14:28:46 · 1634 阅读 · 0 评论 -
Acwing 854- Floyd求最短路
给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定k个询问,每个询问包含两个整数x和y,表示查询从点x到点y的最短距离,如果路径不存在,则输出impossible。数据保证图中不存在负权回路。输入格式第一行包含三个整数n,m,k。接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。接下来kk行,每行包含两个整数x,y表示询问点x到点y的最短距离。输出格式共k...原创 2021-04-28 20:36:35 · 107 阅读 · 0 评论 -
Acwing 853-有边数限制的最短路
题目:给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。请你求出从1号点到n号点的最多经过k条边的最短距离,如果无法从1号点走到n号点,输出impossible。注意:图中可能存在负权回路。输入格式第一行包含三个整数n,m,k。接下来m行,每行包含三个整数x,y,z表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示从1号点到n号点的最多经过k条边的最短距离。如果不存在...转载 2021-04-28 20:18:09 · 102 阅读 · 0 评论 -
Acwing 852-spfa判断负环
题目:给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。请你判断图中是否存在负权回路。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z表示存在一条从点x到点y的有向边,边长为z。输出格式如果图中存在负权回路,则输出Yes,否则输出No。数据范围1≤n≤2000,1≤m≤10000,图中涉及边长绝对值均不超过 10000。输入样例:3 31 2 -12 3 43 1 -4输出...原创 2021-04-28 20:10:47 · 102 阅读 · 0 评论 -
Acwing 851-spfa求最短路
题目:给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible。数据保证不存在负权回路。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出impossible。数据范围1≤...原创 2021-04-28 19:26:03 · 93 阅读 · 0 评论 -
Acwing 850-Dijkstra求最短路 II
1.题目:给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出−1。输入格式第一行包含整数n和m。接下来mm行每行包含三个整数x,y,z表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出−1。数据范围1≤n,m≤1.5×1e5图中涉及边长均不小于0,且...原创 2021-04-28 14:19:39 · 133 阅读 · 0 评论 -
Acwing 849-Dijkstra求最短路 I
题目:给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出−1。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出 -1。数据范围1≤n≤5001≤m≤1e5图中涉及边长均不超过10000。...原创 2021-04-27 16:43:36 · 205 阅读 · 0 评论 -
Acwing 848-有向图的拓扑序列
题目:给定一个n个点m条边的有向图,点的编号是1到n,图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出−1。若一个由图中所有点构成的序列A满足:对于图中的每条边(x,y),x在A中都出现在y之前,则称A是该图的一个拓扑序列。输入格式第一行包含两个整数n和m。接下来m行,每行包含两个整数x和y,表示存在一条从点x到点y的有向边(x,y)。输出格式共一行,如果存在拓扑序列,则输出任意...原创 2021-04-27 13:45:21 · 195 阅读 · 0 评论 -
Acwing 847-图中点的层次
题目:给定一个n个点m条边的有向图,图中可能存在重边和自环。所有边的长度都是1,点的编号为1∼n。请你求出1号点到n号点的最短距离,如果从1号点无法走到n号点,输出−1。输入格式第一行包含两个整数n和m。接下来m行,每行包含两个整数a和b,表示存在一条从a走到b的长度为1的边。输出格式输出一个整数,表示1号点到n号点的最短距离。数据范围1≤n,m≤1e5输入样例:4 51 22 33 4...原创 2021-04-27 13:13:20 · 164 阅读 · 0 评论 -
Acwing 846-树的重心
#include<bits/stdc++.h>using namespace std;const int N=1e5+10;int n;vector<int> G[N];bool vis[N];int ans=N;//以u为根的子树中点的数量int dfs(int u){ vis[u]=true; int sum=1,res=0; for(auto i : G[u]) { if(!vis[i]) .原创 2021-04-27 11:05:14 · 468 阅读 · 0 评论 -
1.简单搜索 刷题记录
POJ 1321#include<bits/stdc++.h>using namespace std;int n,k,ans=0;char md[10][10];bool vis[10];void dfs(int row,int num){ if(num==k) { ans++; return ; } if(row>n) return ; for(int j=1;j<=n;j++)原创 2021-03-20 18:48:00 · 140 阅读 · 0 评论 -
Educational Codeforces Round 98 (Rated for Div. 2)——A,B,C,D Codeforces 1452 A-D
题目A:题解:这是一道思维题,给你一个坐标(x,y),问你从原点到这个坐标最少需要多少步,每次可以上下左右或者在原地不动,相邻两次的操作不能相同,画个图,找找规律就可以得到答案了。#include<iostream>#include<cmath>#include<algorithm> using namespace std; int main(){ int t; cin>>t; while(t--)原创 2020-11-20 13:49:41 · 272 阅读 · 0 评论