摘要: 题意:求从A点到所有点的最短距离 + 所有点到A点的最短距离 之和的最大值正反两次dijkstra#define M 1001struct Node{ int v,val,next;}edge[2*M*M];int len;int head1[M],head2[M], n,rt;int dist1[M],dist2[M], pre[M],vis[M];void add(int &kind,int v,int val){//起点 终点 权值 edge[len].next=kind; edge[len].v=v; edge[len].val=val; kind=... 阅读全文
posted @ 2013-06-21 13:29 心向往之 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 题意:判是否有负环分析:SPFA 入队n次以上有负环#define M 505struct Node{ int v,val,next;}edge[M<<4];int len;int head[M], n, rt;int dist[M], pre[M], vis[M], times[M];void add(int &kind, int v, int val){//起点 终点 权值 edge[len].next = kind; edge[len].v = v; edge[len].val = val; kind = len++;}deque<int> que;... 阅读全文
posted @ 2013-06-21 13:26 心向往之 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 题意:股票经纪人要在一群人中散布一个传言,传言只能在认识的人中传递,题目将给出人与人的关系(是否认识),以及传言在某两个认识的人中传递所需的时间,要求程序给出以哪个人为起点,可以在好事最短的情况下,让所有人收到消息。分析:先求出每个人向其他人发信息所用的最短时间,然后在所有能向每个人发信息的人中比较他们所用最大时间,找出所用最大时间最小的那一个。#define M 105int maze[M][M],n;//int pre[M][M];void floyd_warshall(){ FOR(k,0,n) FOR(i,0,n){ if(i==k)conti... 阅读全文
posted @ 2013-06-21 13:25 心向往之 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 题意: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)... 阅读全文
posted @ 2013-06-21 13:22 心向往之 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 题意:总结点数 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 阅读全文
posted @ 2013-06-21 13:07 心向往之 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 题意:求至少添加几条边,使原图中没有桥。分析:找出边连通分量,缩点,形成一棵树,树叶有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 阅读全文
posted @ 2013-06-21 12:52 心向往之 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 题意:问每个割点分别和几个连通分量相连分析:每确定一次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 阅读全文
posted @ 2013-06-21 12:48 心向往之 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 题意:有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,... 阅读全文
posted @ 2013-06-21 12:46 心向往之 阅读(195) 评论(0) 推荐(0) 编辑