POJ

来源:互联网 发布:邮件系统服务软件排名 编辑:程序博客网 时间:2024/05/16 01:08

题意:

这里写图片描述

如图所示:A包含1 2 4三点,即他可以A和1 2 3 匹配
B可以和1 3 匹配,以此类推
问有多少字母只能和某一个数字匹配,才能使匹配数最大?

思路:
先建图,二分图,枚举二分图的每一条边,如果去掉这条边之后,匹配数减少,就说明该字母只能和该数字匹配。。

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define ll long longconst ll maxn=1e15;ll a[100000+100];int main (){    ll st,ed;    ll k;    scanf("%lld%lld%lld",&st,&ed,&k);    int n;    scanf("%d",&n);    for(int i=1;i<=n;i++)    {        scanf("%lld",&a[i]);    }    sort(a+1,a+1+n);    if(a[1]>st)    {        printf("%lld\n",st);        return 0;    }    ll ans=st;    ll minn=maxn;    ll mm=0;    for(int i=1;i<=n;i++)    {        if(a[i]-1+k>ed||ans+k>ed)        {            break;        }        if(minn>max(0LL,ans-a[i]+1))        {            minn=max(0LL,ans-a[i]+1);            mm=a[i]-1;        }        ans=max(ans,a[i])+k;    }    if(ans+k>ed)    {        printf("%lld\n",mm);    }    else    {        printf("%lld\n",ans);    }    return 0;}
原创粉丝点击