码迷,mamicode.com
首页 > 其他好文 > 详细

[Codeforces Round49F] Session in BSU

时间:2018-08-19 20:04:47      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:getc   mes   amp   pac   code   ons   space   hung   using   

[题目链接]

        http://codeforces.com/contest/1027/problem/F

[算法]

         二分图匹配

[代码]

       

#include<bits/stdc++.h>
#pragma GOC optimize("Ofast")
using namespace std;
const int MAXN = 1e6 + 10;

struct edge
{
        int to,nxt;
} e[MAXN << 2];

int n,q,len,ans,tot;
int a[MAXN],b[MAXN],ta[MAXN],tb[MAXN],tmp[MAXN << 1],match[MAXN << 2],head[MAXN << 1],visited[MAXN << 2];

template <typename T> inline void read(T &x)
{
        int f = 1; x = 0;
        char c = getchar();
        for (; !isdigit(c); c = getchar()) if (c == -) f = -f;
        for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + c - 0;
        x *= f; 
}
inline void addedge(int u,int v)
{
        tot++;
        e[tot] = (edge){v,head[u]};
        head[u] = tot;
}
inline bool hungary(int u,int k)
{
        int v;
        for (int i = head[u]; i; i = e[i].nxt)
        {
                v = e[i].to;
                if (visited[v] != k)
                {
                        visited[v] = k;
                        if (!match[v] || hungary(match[v],k))
                        {
                                match[v] = u;
                                return true;        
                        }        
                }    
        }        
        return false;
}

int main() 
{
        
        read(n);
        for (int i = 1; i <= n; i++)
        {
                read(a[i]); read(b[i]);
                tmp[++len] = a[i]; tmp[++len] = b[i];
        }
        sort(tmp + 1,tmp + len + 1);
        len = unique(tmp + 1,tmp + len + 1) - tmp - 1;
        for (int i = 1; i <= n; i++) 
        {
                ta[i] = lower_bound(tmp + 1,tmp + len + 1,a[i]) - tmp;
                tb[i] = lower_bound(tmp + 1,tmp + len + 1,b[i]) - tmp;
        }
        for (int i = 1; i <= n; i++)
        {
                addedge(ta[i],len + i);
                addedge(tb[i],len + i);
        }
        for (int i = 1; i <= len; i++)
        {
                if (hungary(i,i))
                {
                        ans++;
                        if (ans == n)
                        {
                                printf("%d\n",tmp[i]);
                                return 0;
                        }
                }
        }
        printf("-1\n");
        
        return 0;
    
}

 

[Codeforces Round49F] Session in BSU

标签:getc   mes   amp   pac   code   ons   space   hung   using   

原文地址:https://www.cnblogs.com/evenbao/p/9502155.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!