hdu4635

思维题

首先我们知道最优解一定是这样的一个结构:它由A和B两部分组成,A和B都是有向完全图,然后A中每个结点都向B中每个结点连一条有向边。

所以问题就简单了,先缩点,然后代公式计算,然后很重要的一点,A和B要么入度为0,要么出度为0~

#include 
#include 
#include 
#include 
#include 
using namespace std;
#define N 100000+10
vectorlink[N];
bool inStack[N];
int dfn[N];
int low[N];
int fa[N];//通过DAG图中 某个顶点所属的强连通分量序号 
int point[N];//统计缩点后某强连通分量的顶点数 
int in[N];//缩点后某强连通分量的入度 
int out[N];//缩点后某强连通分量的出度 
int time;//时间戳 
int sum;//DAG图中连通分量的个数 
int n,m;
stacks;
void doTarjan(int x)
{
    dfn[x]=low[x]=++time;
    s.push(x);
    inStack[x]=true;
    for(int i=0;i

 

你可能感兴趣的:(hdu4635)