摘要: 题意: 知道了N 个学校,以及每个学校提供软件支持的学校编号,一个学校得到软件支持之后便可以支持他能支持的学校,问至少对多少学校提供软件支持可以使得 所有学校都得到软件支持,和至少在这些学校添加多少条边能使得任何一个学校得到软件支持后,其他所有学校都能得到软件支持。分析: 先求出所有的强连通分量并进行染色缩点,找出入度为 0 的强连通分量,其个数即为使所有学校得到支持所需要提供软件支持的最小数量, 而根节点与叶子节点 数量中的最大值即为最少添加的边数。#include<stdio.h>#include<string.h>#define clr(x)memset(x,0, 阅读全文
posted @ 2012-08-15 22:35 'wind 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 题意: 有 N个村庄,和 M 个区域,M个区域是由N个村庄之间的围墙分割而成,如:图中10个村庄间的围墙把地形分成了10 个区域,知道了一些人的所在的村庄的位置,想找一个区域,使得这些人到达这个区域经过的围墙数总和最小,并求出最小值。分析: 要把各个区域看成点,两两区域间的围墙看成边来建图,如果两块区域之间有围墙相隔,那么就在这两个区域之间建一条长度为1 的边, 图建完之后用 FLOYED 求出两两点的最短距离, 计算每个人到达某个区域的最小距离时,要枚举和该人所在村庄相邻的区域。 依次枚举目标区域找出最小值。#include<stdio.h>#include<string. 阅读全文
posted @ 2012-08-15 21:19 'wind 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 题意:有 M 个猪圈,每个猪圈里初始时有若干头猪,一开始所有猪圈都是关闭的,依次来了 N 个顾客,每个顾客分别会打开指定的几个猪圈,从中买若干头猪, 每个顾客分别都有他能够买的数量的上限,每个顾客走后,他打开的那些猪圈中的猪,都可以被任意地调换到其它开着的猪圈里,然后所有猪圈重新关上。分析:此题建图关键在于合并猪圈 建图: 对于每个猪圈的第一个顾客,从源点向他连一条边,容量就是该猪圈里的猪的初始数量 如果从源点到一名顾客有多条边,则可以把它们合并成一条,容量相加, 对于每个猪圈,假设有 n 个顾客打开过它,则对所有整数 i ∈ [1, n),从该猪圈的第 i 个顾客向第 i + 1 个顾客连一 阅读全文
posted @ 2012-08-15 13:34 'wind 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 题意: 给出一定的大写字母,并依次给出 m 个两两关系,如果在输入关系的过程中发现有环,或已经能确定所有序列的关系,则输出相应的结果,并且以后输入的关系 不会对当前结果产生影响。分析: 如果在输入过程每输入一个进行依次拓扑排序,如果排序中出现没有 0 入度的点则说明有环,如果每次找到的 入度为 0 的点均为一个,并且找到n 个,则顺序 可以被确定。#include<stdio.h>#include<string.h>#define clr(x)memset(x,0,sizeof(x))int g[30][30];int d[30];int res[30];int n;i 阅读全文
posted @ 2012-08-15 09:22 'wind 阅读(152) 评论(0) 推荐(0) 编辑