【POJ1021】Intervals (最短路解差分约束)
2016-04-10 16:30
295 查看
题目:
[POJ1201]
感觉自己考虑问题总是不全面啊。
2016-04-10 16:31:30
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #include<queue> using namespace std; #define Maxn 50010 #define INF 0xfffffff struct node { int x,y,c,next; }t[Maxn*4];int len=0; int first[Maxn],cnt[Maxn],dis[Maxn]; bool bq[Maxn],inq[Maxn]; int mymin(int x,int y) {return x<y?x:y;} int mymax(int x,int y) {return x>y?x:y;} void ins(int x,int y,int c) { t[++len].x=x;t[len].y=y;t[len].c=c; t[len].next=first[x];first[x]=len; } queue<int > q; void spfa(int s) { memset(dis,63,sizeof(dis)); memset(inq,0,sizeof(inq)); memset(cnt,0,sizeof(cnt)); if(!q.empty()) q.pop(); dis[s]=0;inq[s]=1;q.push(s); while(!q.empty()) { int x=q.front();q.pop();inq[x]=0; for(int i=first[x];i;i=t[i].next) { int y=t[i].y; if(dis[y]>dis[x]+t[i].c) { dis[y]=dis[x]+t[i].c; if(!inq[y]) { q.push(y); inq[y]=1; } } } } } int main() { int m,mx=0,mn=INF; scanf("%d",&m); memset(first,0,sizeof(first)); memset(bq,0,sizeof(bq)); for(int i=1;i<=m;i++) { int x,y,c; scanf("%d%d%d",&x,&y,&c);x++;y++; ins(y,x-1,-c); bq[x]=bq[y]=1; mx=mymax(mx,y);mn=mymin(mn,x-1); } for(int i=mn;i<mx;i++) ins(i+1,i,0); for(int i=mn;i<mx;i++) ins(i,i+1,1); for(int i=mn;i<=mx;i++) ins(mx+1,i,0); spfa(mx+1); //for(int i=mn;i<=mx;i++) printf("%d %d\n",i,dis[i]); printf("%d\n",dis[mx]-dis[mn]); return 0; }
[POJ1201]
感觉自己考虑问题总是不全面啊。
2016-04-10 16:31:30
相关文章推荐
- SDAU 搜索专题 25 推箱子
- 常用正则表达式
- uva548
- LeetCode *** 204. Count Primes
- 遥感图像
- quartz的JDBC JobStoreTX的配置使用
- android 绘图之Path与Paint详解
- Linux内核分析第七周学习笔记——Linux内核如何装载和启动一个可执行程序
- 小组团队介绍
- 数据结构之二叉树
- MYSQL 中的常见问题(包括数据筛选)
- Intent 的Flag属性(Activity在栈位置的主宰者)
- 栈的压入与弹出
- vmvare 安装centos,把原来的eth0和eth1找回来
- java基础(二),hello word
- 交换类排序
- uva122
- [iOS]UIView动画总结
- poj 3260(多重+完全背包)
- Python学习笔记第一天