【CCF】高速公路 tarjan强连通缩点】的更多相关文章

[题意] 给定一个有向图,问图中互相可达(强连通)的点有多少对 [AC] 强连通缩点,缩点后是一个DAG,所以互相可达的点只在强连通块里. #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> using namespace std; int n,m; ; ; struct edge{ int to; int nxt;…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1179 题意概括 有一个有向图,每一个节点有一个权值,其中有一些结束点. 现在,你要从S出发,到达任意一个结束点,使得经过的节点的权值和最大(可以重复经过某一个节点,但是权值只记入一次). 题解 小码农题. 如果有强连通分量,那么之间的点是可以全部拿到的,傻子才不拿. 所以先Tarjan强连通缩个点. 然后就是一个DAG(有向无环图)了. 那么就是一个记忆化dfs的问题了. 于是就简单了. but…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1051 题意概括 有n只牛,有m个羡慕关系. 羡慕关系具有传递性. 如果A羡慕B,B羡慕C,那么我们认为A也羡慕C. 问有多少牛被所有其他牛羡慕. 题解 这次做这题我已经是第三遍了. USACO经典老题啊!(奶牛) POJ上面也有,叫popular cow. 做法: 先Tarjan强连通缩个点. 然后,统计下入度. 统计入度为0的点数.如果点数大于1,那么答案明显是0. 如果点数是1,那么答案就是…
原文链接https://www.cnblogs.com/zhouzhendong/p/9258043.html 题目传送门 - 洛谷P3953 题目传送门 - Vijos P2030 题意 给定一个有向图,有 $n$ 个节点 $m$ 条边,边权值 $\in[0,1000]$ . 小明要从 $1$ 走到 $n$ ,要求路径长度最大为 $d+k$ ,其中 $d$ 为 $1$ 到 $n$ 最短路长度. 问小明有多少种走法,答案对 $p$ 取模.如果有无数种走法,那么输出 $-1$ . $n\leq 1…
问题描述 某国有n个城市,为了使得城市间的交通更便利,该国国王打算在城市之间修一些高速公路,由于经费限制,国王打算第一阶段先在部分城市之间修一些单向的高速公路. 现在,大臣们帮国王拟了一个修高速公路的计划.看了计划后,国王发现,有些城市之间可以通过高速公路直接(不经过其他城市)或间接(经过一个或多个其他城市)到达,而有的却不能.如果城市A可以通过高速公路到达城市B,而且城市B也可以通过高速公路到达城市A,则这两个城市被称为便利城市对. 国王想知道,在大臣们给他的计划中,有多少个便利城市对. 输入…
int dfn[maxn],low[maxn],belong[maxn]; bool instk[maxn]; stack<int>stk; void tarjan(int u){ dfn[u]=low[u]=++cnt; stk.push(u); instk[u]=1; int sz=gra[u].size(); for(int i=0;i<sz;i++){ int v=gra[u][i]; if(!dfn[v]){ tarjan(v); low[u]=min(low[u],low[v…
模板题 #include<bits/stdc++.h> using namespace std; #define ll long long #define N 500005 #define mod 1000000007 int n,a[N]; vector<int>G[N]; int cnt,dfn[N],low[N],ind,stk[N],ins[N],top; vector<int>scc[N]; void tarjan(int x){ dfn[x]=low[x]=…
题目链接(洛谷):https://www.luogu.org/problemnew/show/P3731 题意概述:给出一张二分图,询问删掉哪些边之后可以使这张二分图的最大独立集变大.N<=10000,0<=M<=min (150000,N(N-1)/2). 这个题首先你得总结出题意就是这个样子不然就是凉的..... 二分图的最大独立集,可以想到网络流完成(定理:二分图的最大独立集=二分图点数-二分图最大匹配).当最小割边小的时候独立集就变大了,因此问题变删掉哪些边可以让最小割变小. 这…
Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手. 警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识的人, 谁是杀手, 谁是平民. 假如查证的对象是杀手, 杀手将会把警察干掉. 现在警察掌握了每一个人认识谁. 每一个人都有可能是杀手,可看作他们是杀手的概率是相同的. 问:根据最优的情况,保证警察自身安全并知道谁是杀手的概率最大是多少? Input 第一行有两个整数 N,M. 接下来有 M 行,每行两个整数 x…
题目大意:CodeVs2822的简单版本 传送门 $Tarjan$强连通分量+缩点,若连通块的个数等于一则输出n:若缩点后图中出度为0的点个数为1,输出对应连通块内的点数:否则输出0: 代码中注释部分是调了半个小时没发现有错的地方... #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> #include<cctype> #define foru(i,x,y…