每日一题 7月9日 Color 匈牙利算法+同点不同色的二分图的染色

题目链接:https://ac.nowcoder.com/acm/problem/14254
题目大意:
图片说明

思路:参考大佬的思路:
图片说明

#include <bits/stdc++.h>
using namespace std;

map<int, int> mp[1005];
int cloer[1005][1005];
int vis[2005];
void dfs(int x, int y, int c1, int c2){
    int to=cloer[y][c1];
    cloer[x][c1]=y, cloer[y][c1]=x;//强行把x-y染成c1。让y把c1的正确那条边染成c2
    if(!to){
        cloer[y][c2]=0;
    }
    else{
        dfs(y, to, c2, c1);
    }

}

int main(){
    int n, m, x, y; scanf("%d%d", &n, &m);
    int ans=0;
    for(int i=1; i<=m; i++){
        scanf("%d%d", &x, &y);
        mp[x][y]=mp[y][x]=i;
        int c1=1, c2=1;
        while(cloer[x][c1]){
            c1++;
        }
        while(cloer[y][c2]){
            c2++;
        }
        if(c1>c2){
            swap(x, y); swap(c1, c2);
        }
        ans=max(ans, c2);
        if(c1==c2){//如果最小没有使用的颜色一样,就直接染色
            cloer[x][c1]=y;
            cloer[y][c1]=x;
        }
        else{
            dfs(x, y, c1, c2);//否则找增广路
        }
    }
    printf("%d\n", ans);
    for(int i=1; i<=n; i++){
        for(int j=1; j<=ans; j++){
            int to=cloer[i][j];
            if(to){
                vis[mp[i][to]]=j;
            }
        }
    }
    for(int i=1; i<=m; i++){
        printf("%d\n", vis[i]);
    }

    return 0;
}
全部评论

相关推荐

感觉他们一点都不了解现在这个社会就业有多难,已经在牛客刷到好多篇&nbsp;延毕的帖子了,延毕就会导致已经找好的工作就没了,还得重新再找,学校和老师们是怎么想的呢????看到学生丢失工作会开心吗&nbsp;就业数据都在造假,真实的就业困难不去解决&nbsp;一个个真是好样的
从明天开始狠狠卷JV...:学生看到的是导师不放实习导致offer黄了。 导师看到的是招进来的学生吃自己补助和自己的招生名额,却没给自己升迁带来任何帮助,还要跑路。 根本利益的不一致,最主要留校的导师大概率是职场上招聘失败的,被迫留校的,什么牛鬼蛇神都会有
点赞 评论 收藏
分享
头像
05-26 10:24
门头沟学院 Java
qq乃乃好喝到咩噗茶:其实是对的,线上面试容易被人当野怪刷了
找工作时遇到的神仙HR
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务