拓扑排序+关键路径【洛谷P1983】

传送门:https://www.luogu.org/problemnew/show/P1983

忘记memset数组pos了,WA了好长时间。(划掉)

题目中给定了火车的关系,火车停的点都要>=所有点。这种关系比较模棱两可,我们是不是可以知道不停的点一定小于停靠的点呢。答案是肯定的。

我们就把停靠的点和没停靠的点之间连边,然后topsort出最长路经,每次更新一下ans,答案就更新出来啦!

下面是大家喜闻乐见的代码:
 

#include 
#define INF 0x3f3f3f3f
using namespace std;
typedef pair P;
const int maxn = 1010;
vector G[maxn]; 
int a[maxn];
int pos[maxn];
int ind[maxn];
int vis[maxn][maxn];
int ans = 0;
int n,m;
void topsort()
{
	queue

q; for(int i=1;i<=n;i++) { if(ind[i]==0) { q.push(P(i,1)); } } while(!q.empty()) { P tmp = q.front(); q.pop(); for(int i=0;i

 

你可能感兴趣的:(拓扑排序+关键路径【洛谷P1983】)