四染色,贼好想

一个弃疗图形刚好对应一个红-绿-黄-粉色路线(不要吐槽颜色)

就是裸的最小割,建图傻逼懒得写了

#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
#define mp std::make_pair
std::map<std::pair<int,int>,int>M;
int X[100010],Y[100010],P[100010],S,T;
int fir[100010],head[100010],dep[100010],dis[10000010],nxt[10000010],w[10000010],id=1;
il vd link(int a,int b,int c){
nxt[++id]=fir[a],fir[a]=id,dis[id]=b,w[id]=c;
nxt[++id]=fir[b],fir[b]=id,dis[id]=a,w[id]=0;
}
il bool BFS(){
static int que[100010],hd,tl;
memset(dep,0,sizeof dep);
hd=tl=0;que[tl++]=S;dep[S]=1;
while(hd^tl){
int x=que[hd++];
for(int i=fir[x];i;i=nxt[i])
if(!dep[dis[i]]&&w[i])
dep[dis[i]]=dep[x]+1,que[tl++]=dis[i];
}
return dep[T];
}
il int Dinic(int x,int maxflow){
if(x==T)return maxflow;
int ret=0;
for(int&i=head[x];i;i=nxt[i])
if(w[i]&&dep[dis[i]]==dep[x]+1){
int d=Dinic(dis[i],std::min(maxflow-ret,w[i]));
w[i]-=d,w[i^1]+=d,ret+=d;
if(ret==maxflow)break;
}
return ret;
}
int main(){
gi(),gi();int n=gi();S=n+1,T=n+2;
for(int i=1;i<=n;++i)X[i]=gi(),Y[i]=gi(),P[i]=gi(),M[mp(X[i],Y[i])]=i;
for(int i=1;i<=n;++i)
if(X[i]%4==0||X[i]%4==1){
if((X[i]%4==1)==(Y[i]%2==1)){
if(X[i]%4==1&&M.find(mp(X[i]+1,Y[i]))!=M.end())link(i,M[mp(X[i]+1,Y[i])],std::min(P[i],P[M[mp(X[i]+1,Y[i])]]));
if(X[i]%4==0&&M.find(mp(X[i]-1,Y[i]))!=M.end())link(i,M[mp(X[i]-1,Y[i])],std::min(P[i],P[M[mp(X[i]-1,Y[i])]]));
if(M.find(mp(X[i],Y[i]-1))!=M.end())link(M[mp(X[i],Y[i]-1)],i,1e9);
if(M.find(mp(X[i],Y[i]+1))!=M.end())link(M[mp(X[i],Y[i]+1)],i,1e9);
if(X[i]%4==0&&M.find(mp(X[i]+1,Y[i]))!=M.end())link(M[mp(X[i]+1,Y[i])],i,1e9);
if(X[i]%4==1&&M.find(mp(X[i]-1,Y[i]))!=M.end())link(M[mp(X[i]-1,Y[i])],i,1e9);
}else link(S,i,P[i]);
}else{
if((X[i]%4==2)==(Y[i]%2==1)){
if(M.find(mp(X[i],Y[i]-1))!=M.end())link(i,M[mp(X[i],Y[i]-1)],1e9);
if(M.find(mp(X[i],Y[i]+1))!=M.end())link(i,M[mp(X[i],Y[i]+1)],1e9);
if(X[i]%4==2&&M.find(mp(X[i]+1,Y[i]))!=M.end())link(i,M[mp(X[i]+1,Y[i])],1e9);
if(X[i]%4==3&&M.find(mp(X[i]-1,Y[i]))!=M.end())link(i,M[mp(X[i]-1,Y[i])],1e9);
}else link(i,T,P[i]);
}
int ans=0;while(BFS())memcpy(head,fir,sizeof head),ans+=Dinic(S,1e9);
printf("%d\n",ans);
return 0;
}

最新文章

  1. 【WCF】基址与默认终结点
  2. 已经重写,源码和文章请跳转http://www.cnblogs.com/ymnets/p/5621706.html
  3. Integer与int的区别(包装类和基本数据类型的区别)
  4. viso
  5. Java配置环境变量
  6. centos如何安装软件
  7. sencha touch建立新项目
  8. Django设置
  9. python 调试
  10. 分分钟教你集成沉浸式侧滑关闭Activity
  11. CDOJ 92 – Journey 【LCA】
  12. 我的Android进阶之旅------&gt;Android 设置默认语言、默认时区
  13. 【HDU 4547 CD操作】LCA问题 Tarjan算法
  14. cocos2dx lua 学习笔记(一)
  15. zoj3471(状压dp)
  16. 【瞎搞搞之】 window_x64微信小程序环境搭建
  17. angular.isDefined()
  18. Redis数据类型-Strings
  19. P2P 行业解决方案
  20. 基于Spring4+SpringMVC4+Mybatis3+Hibernate4+Junit4框架构建高性能企业级的部标1077视频监控平台

热门文章

  1. RBAC用户权限管理数据库设计【转载】
  2. 俄罗斯方块(JS+CSS)
  3. Linux 辅助命令
  4. Redis缓存穿透、缓存雪崩、redis并发问题分析
  5. Windows XP添加硬盘后系统不能识别(没有任何反应)
  6. Asp.net core 2.0.1 Razor 的使用学习笔记(六)
  7. November 07th, 2017 Week 45th Tuesday
  8. PyQt5--QFontDiaglog
  9. aused by: org.apache.xmlbeans.SchemaTypeLoaderException: XML-BEANS compiled schema: Incompatible min
  10. 重复子串(string)