bzoj1854: [Scoi2010]游戏 贪心
lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示。当他使用某种装备时,他只能使用该装备的某一个属性。并且每种装备最多只能使用一次。 游戏进行到最后,lxhgww遇到了终极boss,这个终极boss很奇怪,攻击他的装备所使用的属性值必须从1开始连续递增地攻击,才能对boss产生伤害。也就是说一开始的时候,lxhgww只能使用某个属性值为1的装备攻击boss,然后只能使用某个属性值为2的装备攻击boss,然后只能使用某个属性值为3的装备攻击boss……以此类推。 现在lxhgww想知道他最多能连续攻击boss多少次?
题解:全世界都是冰茶几和二分图匹配是什么鬼,xjb贪心就过了,先把小的放前面,sort一遍,然后优先放前面的,放过就放后面的,然后找第一个没有放过的就行了
/**************************************************************
Problem: 1854
User: walfy
Language: C++
Result: Accepted
Time:2132 ms
Memory:13012 kb
****************************************************************/
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define vi vector<int>
#define mod 1000000007
#define ld long double
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
#define cd complex<double>
#define ull unsigned long long
#define base 1000000000000000000
#define fio ios::sync_with_stdio(false);cin.tie(0)
using namespace std;
const double eps=1e-6;
const int N=1000000+10,maxn=20000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;
pii p[N];
int ans[N];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&p[i].fi,&p[i].se);
if(p[i].fi>p[i].se)swap(p[i].fi,p[i].se);
}
sort(p,p+n);
for(int i=0;i<n;i++)
{
if(ans[p[i].fi])ans[p[i].se]=1;
else ans[p[i].fi]=1;
}
int res=0;
for(int i=1;i<N;i++)
{
// printf("%d\n",ans[i]);
if(!ans[i])
{
res=i;
break;
}
}
printf("%d\n",res-1);
return 0;
}
/********************
********************/