栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 3680 Intervals

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 3680 Intervals

#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int N=500,M=1000;const int inf=1<<29;int head[N],nc;struct Edge{    int x,y,next;    int cap,cost;} edge[M*3];void add(int x,int y,int cap,int cost){    edge[nc].x=x;    edge[nc].y=y;    edge[nc].cap=cap;    edge[nc].next=head[x];    edge[nc].cost=cost;    head[x]=nc++;    edge[nc].x=y;    edge[nc].y=x;    edge[nc].cap=0;    edge[nc].next=head[y];    edge[nc].cost=-cost;    head[y]=nc++;}int dist[N],pe[N],pv[N];bool mark[N];int mincost(int n){    int S=0,T=n-1,flow=0,cost=0,mxf,i,j,k;    while(1)    {        for(i=0;i<n;i++) dist[i]=inf;        memset(mark,false,sizeof(mark));        queue<int> Q;        Q.push(S);        mark[S]=true;        dist[S]=0;        while(!Q.empty())        { int now=Q.front(); Q.pop(); mark[now]=false; for(i=head[now];i!=-1;i=edge[i].next) {     Edge x=edge[i];     if(x.cap&&dist[x.y]>x.cost+dist[now])     {         dist[x.y]=x.cost+dist[now];         pe[x.y]=i;         pv[x.y]=now;         if(!mark[x.y])         {  mark[x.y]=true;  Q.push(x.y);         }     } }        }        if(dist[T]==inf) return cost;        for(k=T,mxf=inf;k!=S;k=pv[k]) mxf=min(mxf,edge[pe[k]].cap);        flow+=mxf;cost+=dist[T]*mxf;        for(k=T;k!=S;k=pv[k]) edge[pe[k]].cap-=mxf,edge[pe[k]^1].cap+=mxf;    }}int data[N][3],ar[N];int lisan[100005];int main(){    int T;    for(scanf("%d",&T);T;T--)    {        int num,i,j,k,n=1;        memset(lisan,-1,sizeof(lisan));        memset(head,-1,sizeof(head));        nc=0;        scanf("%d%d",&num,&k);        for(i=0;i<num;i++) scanf("%d%d%d",&data[i][0],&data[i][1],&data[i][2]),ar[n++]=data[i][0],ar[n++]=data[i][1];        sort(ar+1,ar+n);        for(i=2,j=1;i<n;i++) if(ar[j]!=ar[i])     ar[++j]=ar[i];        n=j+1;        add(0,1,k,0);        for(i=1;i<n;i++)        { lisan[ar[i]]=i; add(i,i+1,k,0);        }        for(i=0;i<num;i++) add(lisan[data[i][0]],lisan[data[i][1]],1,-data[i][2]);        printf("%dn",-mincost(n));    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/367758.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号