zoukankan      html  css  js  c++  java
  • 【UVA1194】Machine Schedule

    题目大意:给定 N 个任务和两台机器,每个任务可以在任意一台机器上执行,每台机器有 N 个启动状态,不同任务需要机器在不同的状态下执行,求执行所有任务需要多少个不同的状态。

    题解:由于一个任务一定要被两台机器中的一台执行,可以将任务看作边,连接两台机器的对应启动状态。所要求的是这个二分图的最大独立集,因此,只需求出其最大匹匹数即可。

    代码如下

    #include <bits/stdc++.h>
    #define fi first
    #define se second
    #define pb push_back
    #define mp make_pair
    #define all(x) x.begin(),x.end()
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> P;
    const int dx[]={0,1,0,-1};
    const int dy[]={1,0,-1,0};
    const int mod=1e9+7;
    const int inf=0x3f3f3f3f;
    //const int maxn=
    const double eps=1e-6;
    inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
    inline ll sqr(ll x){return x*x;}
    inline ll read(){
    	ll x=0,f=1;char ch;
    	do{ch=getchar();if(ch=='-')f=-1;}while(!isdigit(ch));
    	do{x=x*10+ch-'0';ch=getchar();}while(isdigit(ch));
    	return f*x;
    }
    /*--------------------------------------------------------*/
    
    vector<int> G[101];
    int match[101];bool vis[101];
    int n,m,q,ans;
    
    void read_and_parse(){
    	m=read(),q=read();
    	for(int i=1;i<=q;i++){
    		int d=read(),x=read(),y=read();
    		G[x].pb(y);
    	}
    }
    
    bool dfs(int u){
    	for(auto v:G[u])if(!vis[v]){
    		vis[v]=1;
    		if(!match[v]||dfs(match[v])){
    			match[v]=u;return 1;
    		}
    	}
    	return 0;
    }
    
    void solve(){
    	for(int i=1;i<=n;i++){
    		memset(vis,0,sizeof(vis));
    		if(dfs(i))++ans;
    	}
    	printf("%d
    ",ans);
    }
    
    void init(){
    	ans=0;
    	for(int i=1;i<=100;i++)G[i].clear();
    	memset(match,0,sizeof(match));
    }
    
    int main(){
    	while(n=read()){
    		init();
    		read_and_parse();
    		solve();
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    servicestack and redis
    图片服务器
    CRQS介绍
    javascript闭包之购物车加减及提示
    javascript best practices
    EOF
    2012年回顾
    volatile
    通过inode来操作文件
    采样问题
  • 原文地址:https://www.cnblogs.com/wzj-xhjbk/p/10641660.html
Copyright © 2011-2022 走看看