
图论
小菜鸡在努力啊
余生很长,请多指教。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
T46449 有向图无环(DAG)的判定 (dfs)
T46449 有向图无环(DAG)的判定 提交 172 通过 69 时间限制 1.00s 内存限制 125.00MB 提交答案 加入收藏 题目提供者 BDFZ-OIER 难度 暂无评定 历史分数 100 提交记录 标签 暂无标签 进入讨论版 相关讨论 暂无 推荐题目 展开 题目描述 给定无权有向图G(V,E),请判断G是否是一个有向无环图(DAG)。 *在有向图中,若存在B边,则存在环。 输入格式 第一行包含两个整数N、M,表示该图共有N个结点和M条有向边。(N <= 5000,M <= 200原创 2020-07-19 18:01:22 · 792 阅读 · 0 评论 -
T67747 边的分类 (图上dfs)
T67747 边的分类 提交 20 通过 15 时间限制 1.00s 内存限制 62.50MB 提交答案 加入收藏 题目提供者 BDFZ-OIER 难度 暂无评定 历史分数 100 提交记录 标签 暂无标签 进入讨论版 相关讨论 暂无 推荐题目 暂无 展开 题目描述 给定无权有向图G(V,E),dfs确定每条边的种类。当边(u, v)第一次被遍历, 考虑v的颜色 1.白色,(u,v)为T边,包含在dfs树中 2.灰色,(u,v)为B边,dfs树中子孙指向自己直系祖先的一条边 3.黑色: (u,v)为F边或C原创 2020-07-19 18:00:30 · 355 阅读 · 0 评论 -
P1194 买礼物 (最小生成树)
题目描述 又到了一年一度的明明生日了,明明想要买BB样东西,巧的是,这BB样东西价格都是AA元。 但是,商店老板说最近有促销活动,也就是: 如果你买了第II样东西,再买第JJ样,那么就可以只花K_{I,J}K I,J 元,更巧的是,K_{I,J}K I,J 竟然等于K_{J,I}K J,I 。 现在明明想知道,他最少要花多少钱。 输入格式 第一行两个整数,A,BA,B。 接下来BB行,每行BB个数,第II行第JJ个为K_{I,J}K I,J 。 我们保证K_{I,J}=K_{J,I}原创 2020-07-13 16:27:50 · 455 阅读 · 0 评论 -
P1037 产生数 (floyd+高精)
题目描述 给出一个整数 n(n<10^30)和 k 个变换规则(k≤15)。 规则: 一位数可变换成另一个一位数。 规则的右部不能为零。 例如:n=234。有规则(k=2): 2->5 3->6 上面的整数 234 经过变换后可能产生出的整数为(包括原数): 234 534 264 564 共 4 种不同的产生数。 现在给出一个整数 n 和 k 个规则。求出经过任意次的变换(0次或多次),能产生出多少个不同整数。 仅要求输出个数。 输入格式 第一行两个整数 n,k。 接下来 kk 行,每行原创 2020-07-10 14:37:07 · 414 阅读 · 0 评论 -
P2853 [USACO06DEC]Cow Picnic S (图的dfs)
The cows are having a picnic! Each of Farmer John’s K (1 ≤ K ≤ 100) cows is grazing in one of N (1 ≤ N ≤ 1,000) pastures, conveniently numbered 1…N. The pastures are connected by M (1 ≤ M ≤ 10,000) one-way paths (no path connects a pasture to itself). The原创 2020-07-07 14:50:13 · 358 阅读 · 0 评论 -
poj3259 (spfa找负环)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 80990 Accepted: 30023 Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes. A wormhole is very peculiar because it is a one-way path that原创 2020-06-23 21:51:46 · 198 阅读 · 0 评论 -
P4017 最大食物链计数(拓扑排序)
P4017 最大食物链计数 入口 题目背景 你知道食物链吗?Delia 生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条。于是她来就来求助你,然而你也不会啊!写一个程序来帮帮她吧。 题目描述 给你一个食物网,你要求出这个食物网中最大食物链的数量。 (这里的“最大食物链”,指的是生物学意义上的食物链,即最左端是不会捕食其他生物的生产者,最右端是不会被其他生物捕食的消费者。) Delia 非常急,所以你只有 11 秒的时间。 由于这个结果可能过大,你只需要输出总数模上 801120原创 2020-06-11 18:52:12 · 198 阅读 · 0 评论 -
P1629 邮递员送信(dijkstra)
P1629 邮递员送信 提交 9.89k 通过 4.14k 时间限制 1.00s 内存限制 125.00MB 提交答案 加入收藏 题目提供者 xmyzwls 难度 普及/提高- 历史分数 100 提交记录 查看题解 标签 进入讨论版 相关讨论 推荐题目 展开 题目描述 有一个邮递员要送东西,邮局在节点 11。他总共要送 n-1n−1 样东西,其目的地分别是节点 22 到节点 nn。由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有 mm 条道路。这个邮递员每次只能带一样东西,并且运送每件物品过原创 2020-06-04 20:28:55 · 601 阅读 · 0 评论 -
P3916图的遍历(dfs)
洛谷3916 按题目来每次考虑每个点可以到达点编号最大的点,不如考虑较大的点可以反向到达哪些点 循环从N到1,则每个点i能访问到的结点的A值都是i 每个点访问一次,这个A值就是最优的,因为之后如果再访问到这个结点那么答案肯定没当前大了 #include<iostream> #include<queue> #include<cstring> #include<algorithm> #include<vector> using namespace st原创 2020-05-30 23:14:11 · 350 阅读 · 0 评论 -
P4779 【模板】单源最短路径(标准版)(dijkstra)
洛谷4779 求起点到所有点的最小距离。 #include<iostream> #include<queue> #include<cstring> #include<algorithm> #include<vector> using namespace std; const int maxn=111005; struct node{ int v,w; node(int v,int w):v(v),w(w){} bool opera原创 2020-05-30 23:12:02 · 188 阅读 · 0 评论 -
最小生成树(模板)
最小生成树(MST):将给出的所有点连接起来(即从一个点可到任意一个点),且连接路径之和最小的图叫最小生成树。 数据结构:树形结构,或者说是直链型结构,因为当n个点相连,且路径和最短,那么将它们相连的路一定是n-1条 实现思路:将点分为在树中的点与不在树中的点,每次取出树中点的连接的最小路径,且该路径连接的点不在树中,然后将该路径连接的点加入树中,重复并进行路径更新,即松弛,当取出边达到n-1条时,树已建立。 洛谷P1546 求一条路径,使得u到v连通的路径的最小长度 (Prim算法) 本质上还是贪心思想原创 2020-05-29 22:19:26 · 393 阅读 · 0 评论 -
拓扑排序(模板)
u107394 #include<bits/stdc++.h> using namespace std; const int maxn=100005; vector<int>adj[maxn]; int degree[maxn]; int main(){ int n,m; cin>>n>>m; while(m--){ int a,b; cin>>a>>b; adj[a].push_back(b); d原创 2020-05-29 10:46:27 · 173 阅读 · 0 评论 -
New Year Permutation(floyd)
Codeforce 500B B. New Year Permutation time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output User ainta has a permutation p 1, p 2, …, p n. As the New Year is coming, he wants to make his permutation as原创 2020-05-27 21:39:15 · 196 阅读 · 0 评论 -
floyd模板
floyd算法:用来求结点间的最小路径;(一般题目给的结点数不超过500个才用此法,INF不宜取过大) for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(i==j)d[i][j]=0; else if(a[i][j]d[i][j]=a[i][j]; else d[i][j]=Inf; } } for(int k=1;k<=n;k++){ for(int i=1;i<=原创 2020-05-27 21:17:05 · 195 阅读 · 0 评论 -
SPFA算法模板
struct node{ int v,w;//终点和权重 }; vector<node>adj[maxn]; int vis[maxn]; int d[maxn]; const int Inf=0x3f3f3f3f; queue<int>q; int n,m,s,t; void spfa(){ for(int i=1;i<=n;i++){ d[i]=Inf; } d[s]=0; vis[s]=1; q.push(s); while(!q.empty()){原创 2020-05-27 14:10:39 · 179 阅读 · 0 评论 -
dijkstra算法(模板)
洛谷1339 题目意思:给定n个结点和m条边,求s到t的最短距离。我们知道在无权图中求最短路可以直接用bfs,在有权图bfs就失效了,我们考虑用dijkstra算法(负权图就不能用).(本质还是贪心算法) #include<iostream> #include<cstring> #include<queue> int g[1005][1005]; using namespace std; int n,m,s,t; struct edge{ int v,w;//边的原创 2020-05-26 23:10:43 · 809 阅读 · 0 评论 -
图的dfs(模板)
洛谷T464462 思路:对每个节点都进行一次dfs,在dfs前先看看这个点有没有访问过,没访问过就cnt++,对这个点dfs。让每个结点最大程度的染他经过的点。 #include<iostream> #include<cstdio> #include<vector> using namespace std; int n, m, cnt, vis[5010]; vector <int> a[5010]; void dfs(int u) { vis[u]原创 2020-05-26 20:37:33 · 279 阅读 · 0 评论