博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P2046 [NOI2010]海拔(最小割,平面图转对偶图)
阅读量:6607 次
发布时间:2019-06-24

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

 

不明白为什么大佬们一眼就看出这是最小割……

所以总而言之这就是一个最小割我也不知道为什么

然后边数太多直接跑会炸,所以要把平面图转对偶图,然后跑一个最短路即可

至于建图……请看代码我实在无能为力

1 //minamoto 2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++) 8 char buf[1<<21],*p1=buf,*p2=buf; 9 template
inline bool cmin(T&a,const T&b){
return a>b?a=b,1:0;}10 inline int read(){11 #define num ch-'0'12 char ch;bool flag=0;int res;13 while(!isdigit(ch=getc()))14 (ch=='-')&&(flag=true);15 for(res=num;isdigit(ch=getc());res=res*10+num);16 (flag)&&(res=-res);17 #undef num18 return res;19 }20 const int N=1e6+5,M=2e6+5;21 struct node{22 int u,dis;23 node(){}24 node(int u,int dis):u(u),dis(dis){}25 inline bool operator <(const node &b)const26 {
return dis>b.dis;}27 };28 int head[N],ver[M],edge[M],Next[M],tot;29 int dis[N],vis[N];30 int n,S,T,x;31 priority_queue
q;32 inline void add(int u,int v,int e){33 ver[++tot]=v,Next[tot]=head[u],head[u]=tot,edge[tot]=e;34 }35 int spfa(){36 memset(dis,0x3f,sizeof(dis));37 memset(vis,0,sizeof(vis));38 q.push(node(S,0)),dis[S]=0;39 while(!q.empty()){40 int u=q.top().u;q.pop();41 if(vis[u]) continue;42 vis[u]=1;43 for(int i=head[u];i;i=Next[i]){44 int v=ver[i];45 if(cmin(dis[v],dis[u]+edge[i]))46 q.push(node(v,dis[v]));47 }48 }49 return dis[T];50 }51 int main(){52 // freopen("testdata.in","r",stdin);53 n=read();S=n*n+1,T=S+1;54 for(int i=0;i<=n;++i)55 for(int j=1;j<=n;++j){56 x=read();57 i==0?add(j,T,x):i==n?add(S,(i-1)*n+j,x):add(i*n+j,(i-1)*n+j,x);58 }59 for(int i=1;i<=n;++i)60 for(int j=0;j<=n;++j){61 x=read();62 j==0?add(S,(i-1)*n+j+1,x):j==n?add(i*n,T,x):add((i-1)*n+j,(i-1)*n+j+1,x);63 }64 for(int i=0;i<=n;++i)65 for(int j=1;j<=n;++j){66 x=read();67 i==0?add(T,j,x):i==n?add((i-1)*n+j,S,x):add((i-1)*n+j,i*n+j,x);68 }69 for(int i=1;i<=n;++i)70 for(int j=0;j<=n;++j){71 x=read();72 j==0?add((i-1)*n+j+1,S,x):j==n?add(T,i*n,x):add((i-1)*n+j+1,(i-1)*n+j,x);73 }74 printf("%d\n",spfa());75 return 0;76 }

 

转载于:https://www.cnblogs.com/bztMinamoto/p/9687511.html

你可能感兴趣的文章
libevent (三) 事件注册与循环监听
查看>>
seaborn笔记
查看>>
win10安装ubuntu16.04双系统
查看>>
读人月神话有感
查看>>
Python第一天
查看>>
管理工具
查看>>
未找到工作先遇黑客 八大人事局网站被挂马
查看>>
VB100十二月成绩公布
查看>>
ifanr访谈:GuruDigger — Web工程师排排坐
查看>>
Windows Phone 7新开发工具发布
查看>>
一起谈.NET技术,利用Response.Flush和iframe实现”服务器推”技术
查看>>
一起谈.NET技术,七种武器武装.NET(常用开发工具介绍)
查看>>
一起谈.NET技术,解决编程中序列化问题
查看>>
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
查看>>
旅行的牧歌
查看>>
volatile与restrict
查看>>
nodejs基础 -- express框架
查看>>
500. Keyboard Row
查看>>
260. Single Number III
查看>>
第8周课下作业2(补)
查看>>