摘要:
题意:n×m的棋盘,上面有羊和狼,可以在格子四条边上修护栏,问最少修多少护栏可以使狼吃不到羊?分析:超级源点连狼,超级汇点连羊,容量无穷大,求最小割。#define M 40010struct Node{ int c,v,next;}E[999999];int head[M];int gap[M],dis[M],pre[M],cur[M],d[M];int NE,NV;int sap(int s,int t) { memset(dis,0,sizeof(int)*(NV+1)); memset(gap,0,sizeof(int)*(NV+1)); FOR(i,0,NV)... 阅读全文
摘要:
题意:总结点数 nodenum 电站数power 用户数consumer 电缆线数linklink个电缆: (起点,终点) 最大传电量power个电站: (电站) 发电量consume个用户:(用户) 用电量分析:建超级源汇点,模板。。。int NUM,FLAG;#define DIG(a) (((a)>='0')&&((a)<='9'))#define cini(j) { \ j=FLAG=0; NUM=getchar(); \ while(!DIG(NUM)&&NUM!='-')NUM=getcha 阅读全文
摘要:
题意:求至少添加几条边,使原图中没有桥。分析:找出边连通分量,缩点,形成一棵树,树叶有cnt个,则结果为(cnt+1)/2#define M 1011struct Node{ int v,next;}edge[M<<4];int len;int old[M],n;int nb;int tim[M],t;int sta[M],top;int low[M],hash[M];//原结点向新结点映射int rudu[M];int bs[M],be[M],bb;//桥void add(int &kind,int v){ edge[len].next=kind; edge[len].v 阅读全文
摘要:
题意:问每个割点分别和几个连通分量相连分析:每确定一次u是割点,rudu[u]+1,若u不是根又是割点,rudu[u]再+1#define M 1011struct Node{ int v,next;}edge[M<<4];int len;int old[M],n;int nb;int tim[M],t;int sta[M],top;int low[M],hash[M];//原结点向新结点映射int rudu[M];int bs[M],be[M],bb;//桥int Case;void add(int &kind,int v){ edge[len].next=kind; e 阅读全文
摘要:
题意:有n个间谍,其中r个花钱可以买通,间谍手上有其他间谍的证据。问能否控制所有间谍。能的话输出最小的钱数,不能的话输出最小的不能被控制的间谍ID。分析:缩点后的价值取环内最小的价值,然后把入度为0的间谍全部买下来。#define M 3011struct Node{ int v,next;//next要初始化为-1}edge[15001];int n , nn , len;int old[M],now[M];int tim[M],t;int low[M],hash[M],hp[M];//原结点向新结点映射 新边判重int sta[M],top;int cost[M];int sum,... 阅读全文