博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Luogu1640 连续攻击游戏
阅读量:5214 次
发布时间:2019-06-14

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

  • 并查集的做法

暂时还不会。

  • 二分图

思路很可以

超时的问题:即使把vis改成bool还是超,于是了解了“时间戳”QwQ(还是很好理解的)

原来memset真的还是挺费时间的

所以二分图这个时间戳的写法真的可以了解一下

#include
#include
#define ll intusing namespace std;int n,head[5000005],match[5000005],vis[5000005],cnt,ans,maxx,timechuo;inline int max(int x,int y){return x>y?x:y;}struct edge{ int v,next;}e[5000005];inline void add(int u,int v){ e[++cnt].v=v; e[cnt].next=head[u]; head[u]=cnt;}inline bool dfs(int u){ for(int i=head[u];i!=-1;i=e[i].next){ if(vis[e[i].v]!=timechuo){ vis[e[i].v]=timechuo; if(match[e[i].v]==-1||dfs(match[e[i].v])){ match[e[i].v]=u; return 1; } } } return 0;}inline void input(ll &x){ ll ans=0,f=1; char c=getchar(); while(c>'9'||c<'0'){ if(c=='-')f=-1; c=getchar(); } while(c>='0'&&c<='9'){ ans=ans*10+c-48; c=getchar(); } x=ans*f;}inline void output(ll x){ if(x<0)x=-x,putchar('-'); if(x>9)output(x/10); putchar(x%10+48);}inline void writeln(ll x){ output(x); putchar('\n');}int main(){ memset(head,-1,sizeof(head)); memset(match,-1,sizeof(match)); input(n); for(int i=1;i<=n;i++){ int x,y; input(x);input(y); add(x,i);add(y,i); maxx=max(maxx,x);maxx=max(maxx,y); } for(int i=1;i<=maxx;i++){ timechuo=i; int temp=dfs(i); if(!temp)break; else ans++; } writeln(ans);}

转载于:https://www.cnblogs.com/Y15BeTa/p/11255065.html

你可能感兴趣的文章
p67交换幺环为整环的充要条件
查看>>
WPF 重写微调自带的样式,ListView、DataGrid、TreeView等所有控件的默认样式
查看>>
bzoj3694: 最短路(树链剖分/并查集)
查看>>
冲刺Two之站立会议10
查看>>
配置docker容器上ssh无密登录
查看>>
vue中给buttion按钮添加键盘回车(enter)事件
查看>>
轮播图记录篇
查看>>
Codevs 1227 方格取数 2(费用流)
查看>>
ef 吐糟
查看>>
读取字体.ttf文件,生成艺术字图片代码
查看>>
上周热点回顾(6.11-6.17)
查看>>
记一次简单的清理挖矿程序过程
查看>>
黑马Java学习笔记之-----静态导入、可变参数和高级For循环
查看>>
java时间调度Quartz入门demo代码示例
查看>>
hellow word!~
查看>>
体会 git 之优越性
查看>>
Appium+python自动化-Android夜神模拟器
查看>>
异常处理:try - except 和 try finally。
查看>>
创建自己的github仓库
查看>>
建造者模式(Builder Pattern)
查看>>