2011年5月17日

poj 3352

摘要: 题意:一个连通的无向图,求至少需要添加几条边,救能保证删除任意一条边,图仍然是连通的。思路:边的双连通图。其实就是要求至少添加几条边,可以使整个图成为一个边双连通图。用tarjan算法(求割点割边)求出low数组,这里可以简化,然后依据“low相同的点在一个边连通分量中”,缩点之后构造成树(这里可以直接利用low[]数组,low[i]即为第i节点所在的连通分量的标号)。求出树中出度为1的节点数left,答案即为(leaf+1)/2。代码:#include<iostream>#include<fstream>using namespace std;int n,m;stru 阅读全文

posted @ 2011-05-17 19:28 宇宙吾心 阅读(972) 评论(0) 推荐(0)

poj 2117

摘要: 题意:一个无向图,现在要去掉其中一个点,要求去掉这个点之后,总连通分支数最大。思路:割点,连通分量。主要分三种情况:1、最普通的情况:如果有边,而且存在割点,就是tarjon算法的深搜过程中求出所有割点的子树的个数(其实也就是如果去掉割点,能使连通分支数增加的个数)的最大值,再加上原来的强连通分支数即可。2、最容易出错的情况:如果没有边,则应该去掉一个点后,连通分支数为原顶点数减去1。3、如果有边,但是图中不存在割点,则输出原来图中连通分支数就行了。代码:#include<iostream>#include<fstream>using namespace std;int 阅读全文

posted @ 2011-05-17 18:54 宇宙吾心 阅读(666) 评论(0) 推荐(0)

poj 2560

摘要: 题意:有n个点,并且知道它们的坐标,求连接所有点的最短路径。代码:#include<iostream>#include<fstream>#include<cmath>using namespace std;double x[101],y[101];double d[101];double w[101][101];int v[101];int n;void read(){// ifstream cin("in.txt"); int i,j,k; cin>>n; for(i=1;i<=n;i++) cin>>x[ 阅读全文

posted @ 2011-05-17 16:17 宇宙吾心 阅读(413) 评论(0) 推荐(0)

poj 1861

摘要: 题意:给出n个点和m条边,求出最小生成树,输出最小生成树权值最大的第一条边,然后再输出最小生成树的边数,以及每一条边代码:#include<iostream>#include<fstream>using namespace std;int n,m;int rank[1001];int f[1001];void init(){ int i; for(i=1;i<=n;i++) { f[i]=i; rank[i]=0; }}int father(int s){ if(s!=f[s]) f[s]=father(f[s]); return f[s];}void union 阅读全文

posted @ 2011-05-17 15:38 宇宙吾心 阅读(476) 评论(0) 推荐(0)

poj 3615

摘要: 题意:奶牛们为了比赛要刻苦训练跳木桩。现在有n个木桩,并知道其中m对木桩的高度差。问奶牛们能从木桩u跳到木桩v,最少的跳跃高度是多少?代码:#include<iostream>#include<fstream>using namespace std;int n,m;int map[301][301];int dp[301][301];void read(){// ifstream cin("in.txt"); int i,j,k,s,t; int q; scanf("%d%d%d",&n,&m,&q); m 阅读全文

posted @ 2011-05-17 15:16 宇宙吾心 阅读(376) 评论(0) 推荐(0)

poj 3169

摘要: 题意:n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >=0。这些牛的距离存在着一些约束关系:1.有ml组(u, v, w)的约束关系,表示牛[u]和牛[v]之间的距离必须<= w。2.有md组(u, v, w)的约束关系,表示牛[u]和牛[v]之间的距离必须>=w。问如果这n头无法排成队伍,则输出-1,如果牛[1]和牛[n]的距离可以无限远,则输出-2,否则则输出牛[1]和牛[n]之间的最大距离。代码:#include<iostream>#include<fstream>#include<queue>using name 阅读全文

posted @ 2011-05-17 14:59 宇宙吾心 阅读(341) 评论(0) 推荐(0)

poj 2502

摘要: 题意:在一个城市里,分布着若干条地铁线路,每条地铁线路有若干个站点,所有地铁的速度均为40km/h。现在你知道了出发地和终点的坐标,以及这些地铁线路每个站点的坐标,你的步行速度为10km/h,且你到了地铁的任意一个站之后就刚好有地铁出发。问你从出发点到终点最少需要多少时间。思路:dijkstra。构图:把起点,终点,以及每个地铁站作为一个图的所有顶点,所有顶点i和j两两之间,均有边权为w = dis/ 10 (km/h) 的边相连,之外,任意地铁线路的任意两个相邻的站点,均有边权为w = dis/ 40 (km/h)的边相连。然后就是求最短路径了。代码:#include<iostream 阅读全文

posted @ 2011-05-17 14:03 宇宙吾心 阅读(927) 评论(0) 推荐(0)

导航