poj1716(差分约束+Bellman_Ford)
2012-05-09 23:26
363 查看
题目链接:http://poj.org/problem?id=1716
题目意思:有n个区间[a,b],现在要求寻找一个最短序列,要求该序列中至少有两个数字出现在所给n个区间的每个区间中。
思路:这是第一道差分约束题目,所以也并不了解,就在网上参考了大牛的代码。代码中,以dis[i]表示该序列出现在区间[0,i+1]的数字个数,则会有一下三个约束条件:
1、dis[b+1]-dis[a]>=2;(该条件为题目明确要求)
2、0=<dis[i+1]-dis[i]<=1;(该为隐藏条件)
本来觉得以下使用Bellman_Ford算法求解会超时的,可是最后并没有超时,可能是POJ的测试数据有点弱吧,在这里就不深究了,不管怎么说,第一道差分约束,马马虎虎就算做完了,接下来还是要找一些练习巩固啊,加油!!
代码:
题目意思:有n个区间[a,b],现在要求寻找一个最短序列,要求该序列中至少有两个数字出现在所给n个区间的每个区间中。
思路:这是第一道差分约束题目,所以也并不了解,就在网上参考了大牛的代码。代码中,以dis[i]表示该序列出现在区间[0,i+1]的数字个数,则会有一下三个约束条件:
1、dis[b+1]-dis[a]>=2;(该条件为题目明确要求)
2、0=<dis[i+1]-dis[i]<=1;(该为隐藏条件)
本来觉得以下使用Bellman_Ford算法求解会超时的,可是最后并没有超时,可能是POJ的测试数据有点弱吧,在这里就不深究了,不管怎么说,第一道差分约束,马马虎虎就算做完了,接下来还是要找一些练习巩固啊,加油!!
代码:
#include<stdio.h> #include<string.h> #define INF 100000000; struct Edge{ int u; int v; int w; }edge[40020]; int dis[10005]; int ans,maxnum; int n,m,a,b; int max(int x,int y) { return x>y ? x : y; } int Bellman_Ford() { int i,j; int flag; memset(dis,0,sizeof(dis)); for(i=0;i<maxnum;i++) { flag=0; for(j=0;j<m;j++) { if(dis[edge[j].v]<dis[edge[j].u]+edge[j].w) { dis[edge[j].v] = dis[edge[j].u]+edge[j].w; flag=1; } } if(!flag) break; } return dis[maxnum]; } int main() { int i; while(scanf("%d",&n)!=EOF) { m=0; maxnum=-INF; while(n--) { scanf("%d%d",&a,&b); maxnum=max(maxnum,b+1); edge[m].u=a; edge[m].v=b+1; edge[m].w=2; //约束条件dis[b+1]-dis[a]>=2 m++; } for(i=0;i<maxnum;i++) { edge[m].u=i+1; edge[m].v=i; edge[m].w=-1;//约束条件dis[i+1]-dis[i]<=1; m++; edge[m].u=i; edge[m].v=i+1; edge[m].w=0; //约束条件dis[i+1]-dis[i]>=0; m++; } ans=Bellman_Ford(); printf("%d\n",ans); } return 0; }
相关文章推荐
- POJ_3169_差分约束+bellman_ford
- POJ 1716 Integer Intervals(差分约束)
- POJ-2983 用Bellman-Ford求解差分约束..
- [poj 1364]King[差分约束详解(续篇)][超级源点][SPFA][Bellman-Ford]
- POJ 1716 (差分约束)
- [poj 1364]King[差分约束详解(续篇)][超级源点][SPFA][Bellman-Ford]
- POJ 3169 Layout 差分约束/Bellman-Ford
- POJ 1716 Integer Intervals(差分约束)
- POJ 1716 Integer Intervals (差分约束)
- poj1716 Integer Intervals (差分约束)
- poj1716 Integer Intervals(差分约束)
- Poj 1716 Integer Intervals(差分约束)
- poj 1716 Integer Intervals (差分约束)
- POJ 1716 差分约束 SPFA
- poj 1716 Integer Intervals(差分约束||贪心)(中等)
- poj 1716 1201 差分约束 SPFA
- poj 1716 -- Integer Intervals ( 差分约束 )
- poj 1716 Integer Intervals(差分约束)
- [poj 1364]King[差分约束详解(续篇)][超级源点][SPFA][Bellman-Ford]
- 关于差分约束的一些总结和题解。(poj 1364 ,3159, 2983, 3169 ,1201 ,1716 ,1275)