[BZOJ]1854: [Scoi2010]游戏
Posted ditoly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[BZOJ]1854: [Scoi2010]游戏相关的知识,希望对你有一定的参考价值。
题目大意:n个装备,每个装备有两个属性值可以二选一,问能选出的最长的从1开始的连续正整数序列。(属性值<=10000,n<=10^6)
思路:匈牙利二分图匹配模板复习,复杂度O(10000^2)。
#include<cstdio> inline int read() { int x;char c; while((c=getchar())<‘0‘||c>‘9‘); for(x=c-‘0‘;(c=getchar())>=‘0‘&&c<=‘9‘;)x=(x<<3)+(x<<1)+c-‘0‘; return x; } #define MN 1000000 #define MM 10001 struct edge{int nx,t;}e[MN*2+5]; int h[MM+5],en,cnt,u[MN+MM+5],t[MN+MM+5]; inline void ins(int x,int y){e[++en]=(edge){h[x],y};h[x]=en;} bool dfs(int x) { for(int i=h[x];i;i=e[i].nx)if(u[e[i].t]!=cnt) { u[e[i].t]=cnt; if(!t[e[i].t]||dfs(t[e[i].t]))return t[e[i].t]=x; } return false; } int main() { int n=read(),i; for(i=1;i<=n;++i)ins(read(),i+MM),ins(read(),i+MM); for(cnt=1;dfs(cnt);++cnt); printf("%d",cnt-1); }
以上是关于[BZOJ]1854: [Scoi2010]游戏的主要内容,如果未能解决你的问题,请参考以下文章