题意:有N个城市,M个公司。现在需要建立交通是获得的利益最大。如果2个公司A,B, A修的路为Xa->Ya,B的路为Xb->Yb,如果Ya==Xb,那么这2个公司有关系。

对于每个公司都有获得的税,和需要付出的价值。求最大能够得到的利润为多少。

分析:

很明显是最小权闭合图。最大获利=总共的值-(付出的值+没得到的值)。

#include<stdio.h>
#include<string.h>
#include<queue>
#define INF 99999999
using namespace std;
const int maxn = ;
struct node
{
int to;
int v;
int flag;
int next;
}edge[maxn*maxn/];
struct company
{
int x;
int y;
int t;
int z;
}temp[];
int index,pre[maxn],S,T,vis[maxn];
int val[],fv[];
int min(int x,int y){return x<y?x:y;}
void add(int x,int y,int z)
{
edge[index].to=y;
edge[index].v=z;
edge[index].flag=index+;
edge[index].next=pre[x];
pre[x]=index++;
edge[index].to=x;
edge[index].v=;
edge[index].flag=index-;
edge[index].next=pre[y];
pre[y]=index++;
}
int dfs(int u,int low)
{
int i,used=;
if(u==T)
return low;
for(i=pre[u];i!=-&&used<low;i=edge[i].next)
{
if(edge[i].v>&&vis[edge[i].to]==vis[u]+)
{
int a=dfs(edge[i].to,min(edge[i].v,low-used));
edge[i].v-=a;
edge[edge[i].flag].v+=a;
used+=a;
}
}
if(!used)
vis[u]=-;
return used;
}
bool BFS()
{
int i;
queue<int>q;
memset(vis,-,sizeof(vis));
vis[]=;
q.push();
while(!q.empty())
{
int t=q.front();
q.pop();
for(i=pre[t];i!=-;i=edge[i].next)
{
if(edge[i].v&&vis[edge[i].to]<)
{
vis[edge[i].to]=vis[t]+;
q.push(edge[i].to);
}
}
}
if(vis[T]>)
return true;
return false;
}
int main()
{
int n,m,i,j,k;
while(~scanf("%d%d",&n,&m))
{
if(!n&&!m)
break;
int sum=;
index=;
memset(pre,-,sizeof(pre));
memset(fv,,sizeof(fv));
for(i=;i<=m;i++)
{
scanf("%d",&val[i]);
}
scanf("%d",&k);
for(i=;i<=k;i++)
{
scanf("%d%d%d%d",&temp[i].x,&temp[i].y,&temp[i].t,&temp[i].z);
val[temp[i].t]-=temp[i].z;
}
for(i=;i<=m;i++)
{
if(val[i]<)
add(i,m+,-val[i]);
else
{
sum+=val[i];
add(,i,val[i]);
}
}
for(i=;i<=k;i++)
{
for(j=;j<=k;j++)
{
if(i==j)continue;
if(temp[i].y==temp[j].x)
{
if(temp[i].t!=temp[j].t)
{
add(temp[i].t,temp[j].t,INF);
}
}
}
}
int ans=;
S=,T=m+;
while(BFS())
{
int a=dfs(,INF);
if(!a)break;
ans+=a;
}
printf("%d\n",sum-ans);
}
}

最新文章

  1. jQuery基础--样式篇(1)
  2. hadoop+javaWeb的开发中遇到包冲突问题(java.lang.VerifyError)
  3. 【JUnit 报错】 method initializationerror not found:JUnit4单元测试报错问题
  4. winhex的使用
  5. Android color(颜色) 在XML文件和java代码中
  6. PS切图保存后的背景图为透明
  7. HDU2066:一个人的旅行(Dijkstra)
  8. 【openstack N版】——手把手教你制作生产环境镜像
  9. PyCharm基本操作
  10. JavaWeb之数据源连接池(2)---C3P0
  11. 解决jsp中编辑和删除时候弹出框闪退的问题。
  12. UDP单播和组播使用SO_REUSEADDR 测试结果
  13. Web前端:博客美化:四、网易云音乐单曲播放器
  14. Nagios安装与配置
  15. centos6 通过 kvm 安装 centos7
  16. windows安装tomcat
  17. nginx——控制 Nginx 并发连接数
  18. 解决maven编译Java中的使用了未经检查或不安全的操作
  19. CCF CSP认证考试试题
  20. myeclipse项目导入IDEA

热门文章

  1. Ionic 左侧菜单(登录主页详情demo)
  2. 转:Linux--进程间通信(信号量,共享内存)
  3. 2019.10.29 csp-s模拟测试92 反思总结
  4. 宝塔https
  5. odoo web controller
  6. JDK8日期时间操作小汇总
  7. hdu 5823 color II——子集dp(独立集)
  8. JavaScript如何实现字符串拼接操作
  9. No module named zope.interface error 的解决
  10. Java是如何实现跨平台的