博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1853(Cyclic Tour)
阅读量:7080 次
发布时间:2019-06-28

本文共 2550 字,大约阅读时间需要 8 分钟。

题目链接:

二分匹配,求最小权,只要一开始先取相反数,lx初始化的时候取无穷小。。。然后KM一敲,最后输出在取相反数就行了。。。

值得一提的是,我这种渣代码,竟然跑了个rank 1。。。orz。。。

View Code
1 #include
2 const int MAXN=110; 3 const int inf=1<<30; 4 using namespace std; 5 int n,m; 6 int map[MAXN][MAXN]; 7 int lx[MAXN],ly[MAXN]; 8 int match[MAXN]; 9 bool visitx[MAXN],visity[MAXN];10 11 //匈牙利算法12 int Hungary(int u){13 visitx[u]=true;14 for(int i=1;i<=n;i++){15 if(!visity[i]&&lx[u]+ly[i]==map[u][i]){16 visity[i]=true;17 if(match[i]==-1||Hungary(match[i])){18 match[i]=u;19 return true ;20 }21 }22 }23 return false ;24 }25 26 void KM_prefect_match(){27 int tmp;28 for(int i=1;i<=n;i++){29 lx[i]=-inf;30 }31 memset(ly,0,sizeof(ly));32 for(int i=1;i<=n;i++){33 for(int j=1;j<=n;j++){34 lx[i]=max(lx[i],map[i][j]);35 }36 }37 for(int i=1;i<=n;i++)38 {39 while(1){40 memset(visitx,false,sizeof(visitx));41 memset(visity,false,sizeof(visity));42 if(Hungary(i))43 break;44 else {45 tmp=inf;46 for(int j=1;j<=n;j++)if(visitx[j]){47 for(int k=1;k<=n;k++){48 if(!visity[k]&&tmp>lx[j]+ly[k]-map[j][k]){49 tmp=lx[j]+ly[k]-map[j][k];50 }51 }52 }53 for(int j=1;j<=n;j++){54 if(visitx[j])55 lx[j]-=tmp;56 if(visity[j])57 ly[j]+=tmp;58 }59 }60 }61 }62 }63 64 int main(){65 while(~scanf("%d%d",&n,&m)){66 memset(match,-1,sizeof(match));67 for(int i=1;i<=n;i++){68 for(int j=1;j<=n;j++){69 map[i][j]=-inf;70 }71 }72 for(int i=1;i<=m;i++){73 int x,y,w;74 scanf("%d%d%d",&x,&y,&w);75 if(map[x][y]<-w){76 map[x][y]=-w;77 }78 }79 KM_prefect_match();80 int flag=false;81 int ans=0;82 for(int i=1;i<=n;i++){83 if(match[i]==-1||map[match[i]][i]==-inf){84 flag=true;85 break;86 }87 ans+=map[match[i]][i];88 }89 if(flag){90 printf("-1\n");91 }else 92 printf("%d\n",-ans);93 }94 return 0;95 }

 

 

转载地址:http://ywlml.baihongyu.com/

你可能感兴趣的文章
代码即财富之我学Java比较器(7)
查看>>
记一次dubbo连接超时分析
查看>>
【译】Envoy threading model
查看>>
mysql主从复制
查看>>
karaf相关知识点
查看>>
鸥几里得算法,求两人个整数的最大公因数
查看>>
Selective Packet Discard
查看>>
20年的老程序员对新入行的朋友的一些建议
查看>>
使用ArrayAdapter创建ListView
查看>>
相关mount的挂载方式
查看>>
生产环境下的ssh服务远程登陆的配置
查看>>
路由器利用loopback接口实现物理冗余链路的IPSEC ×××
查看>>
Windows下NFS服务器设置
查看>>
CUCM与CME的跨域通信
查看>>
J2EE基本概念(1)
查看>>
DH 与RSA的区别
查看>>
shell队列实现线程并发控制
查看>>
c primer plus(第五版)读书笔计 第二章(4)
查看>>
idea使用初级入门
查看>>
MongoDB副本集的常用操作及原理
查看>>