http://www.acdream.tk/problem.php?cid=1001&pid=1dp[i] 表示匹配前i个字符的最大权值View Code #include<stdio.h>#include<string.h>#include<queue>using namespace std;class trie{public : int num; trie* child[27]; trie() { num=0; memset(child,0,sizeof(child)); }}root;void insert(char *s,int... Read More
posted @ 2012-03-23 21:11 Because Of You Views(374) Comments(0) Diggs(0) Edit
给你一幅图,对于图中的每一条边,判断1、存在于任何一颗最小生成树中 any2、至少存在于某一颗最小生成树中 at least one3、不存在任何一棵最小生成树中 none看见就想一做的图论题思路:至少存在于某一颗最小生成树中 这种情况只可能存在于相同权值的边中,所以每次对于同一权值的边一起处理,再用 最小生成树中克鲁斯卡尔的方法来搞利用并查集:如果某时刻一条边的两个端点在同一集合,如果添加这一条边,就会形成一个环,而环中其他的边都是在上一轮已经添加进去了的(权值都比当前边小)所以当前边是none(一开始初始化为none),如果不在同一集合,标记为at least one,对两个集合建边,建完 Read More
posted @ 2012-03-23 16:02 Because Of You Views(520) Comments(0) Diggs(0) Edit
http://codeforces.com/problemset/problem/118/E给定一幅连通的无向图,输入n、m以及m条边要求给每条边一个方向,即把无向图转换成有向图,然后输出每条边(a b 表示a指向b)要求转换后的图两两间依然可以互相到达。如果不可能,输出0;方法:如果原图中存在割边,输出0;反之,随便从某个点开始dfs,把搜到的边一次输出来就好了因为没有桥,则原图是一个双连通分量,两两间可以互相搜到View Code #include<cstdio>#include<vector>#include<set>#include<cstri Read More
posted @ 2012-03-23 15:44 Because Of You Views(448) Comments(0) Diggs(0) Edit
最大权闭合图的证明:http://www.cnblogs.com/wuyiqi/archive/2012/03/12/2391960.html结论:正的权值的和-建图后的最小割的容量选择了一条边就会选择两个点,边的花费为正,点的花费为负,把边看成点,这个点向两个端点连一条边,表示选择这条边就会选择这两个点然后题目就相当于最大权闭合图的模型了题意:有n个点,m个选择,建造n个点各自需要一定花费,每个选择有一定的获利,会选择两个点,当然也要花费求最大的获利每个选择看成是获利点,每个点看成是花费点,新建源点向获利点建边,权值为获利的大小,花费点向汇点建边,权值为花费的大小每个选择向相应的两个点连一条 Read More
posted @ 2012-03-23 14:35 Because Of You Views(701) Comments(0) Diggs(0) Edit