POJ-3680-Intervals
来源:互联网 发布:华为软件开发流程 编辑:程序博客网 时间:2024/06/01 08:55
参考了下网上别人的博客,因为对这类题型还不太熟
地址:http://blog.csdn.net/waitfor_/article/details/7380406
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<queue>#include<algorithm>using namespace std;const int maxm=2000;const int inf=1<<29;struct Edge{ int u; int v; int c;}p[maxm];int n,m,k,e,st,des,num[maxm],head[maxm],cost[maxm],pnt[maxm],flow[maxm],nxt[maxm],dist[maxm],pre[maxm];bool vis[maxm];queue<int> q;void AddEdge(int u,int v,int f,int c){ pnt[e]=v;nxt[e]=head[u];cost[e]=c;flow[e]=f;head[u]=e++; pnt[e]=u;nxt[e]=head[v];cost[e]=-c;flow[e]=0;head[v]=e++;}bool Spfa(){ memset(pre,-1,sizeof(pre)); memset(dist,-1,sizeof(dist)); q.push(st); dist[st]=0; while(!q.empty()) {int u=q.front();q.pop();vis[u]=0;for(int i=head[u];i!=-1;i=nxt[i]){ int v=pnt[i]; if(flow[i]&&dist[v]<dist[u]+cost[i]) {dist[v]=dist[u]+cost[i];pre[v]=i;if(!vis[v]){ q.push(v); vis[v]=1;} }} } return dist[des]!=-1;}int maxflow(){ int ans=0; while(Spfa()) {int mini=inf;for(int i=pre[des];i!=-1;i=pre[pnt[i^1]]) mini=min(mini,flow[i]);for(int i=pre[des];i!=-1;i=pre[pnt[i^1]]){ flow[i]-=mini; flow[i^1]+=mini;}ans+=mini*dist[des]; } return ans;}int Search(int val){ int l=1,r=m-1; while(l<=r) {int mid=(l+r)>>1;if(num[mid]==val) return mid;if(num[mid]<val) l=mid+1;else r=mid-1; } return -1;}int main(){ int T; scanf("%d",&T); while(T--) {e=0;memset(head,-1,sizeof(head));scanf("%d%d",&n,&k);int cnt=1,val[maxm];for(int i=0;i<n;i++){ scanf("%d%d%d",&p[i].u,&p[i].v,&p[i].c); val[cnt++]=p[i].u; val[cnt++]=p[i].v;}sort(val+1,val+cnt);m=1;num[m++]=val[1];for(int i=2;i<cnt;i++) if(val[i]!=val[i-1])num[m++]=val[i];st=0,des=m;for(int i=0;i<m;i++) AddEdge(i,i+1,k,0);for(int i=0;i<n;i++){ int x=Search(p[i].u); int y=Search(p[i].v); AddEdge(x,y,1,p[i].c);}printf("%d\n",maxflow()); } return 0;}
- POJ 3680 Intervals
- poj 3680 intervals
- POJ-3680-Intervals
- poj 3680 Intervals
- POJ 3680 Intervals
- POJ 3680 Intervals
- poj 3680 intervals
- POJ 3680 Intervals
- POJ 3680 Intervals 笔记
- POJ 3680 Intervals
- poj 3680 Intervals 费用流
- poj 3680 Intervals 费用流
- 【网络流】 POJ 3680 Intervals
- poj 3680 Intervals(费用流)
- [费用流] POJ 3680 Intervals
- poj 3680 Intervals 经典的建图!
- 【POJ】 3680 Intervals 离散 + 费用流
- POJ 3680 Intervals(最小费用流)
- 【代码大全】第18章 表驱动法
- GRE(Generic Routing Encapsulation,通用路由封装)简介
- 位图Bitmap
- 【代码大全】第19章 一般控制问题
- 新的开始 新的征程
- POJ-3680-Intervals
- 最优间隔分类、原始/对偶问题、SVM对偶—斯坦福ML公开课笔记7
- 【代码大全】第20章 软件质量概述
- 【代码大全】第21章 协同构建
- 【代码大全】第22章 开发者测试
- 【代码大全】第23章 调试
- ios UIViewController的生命周期
- 【代码大全】第24章 重构
- java线程