网站 做 app公众号如何推广宣传
web/
2025/10/2 21:55:50/
文章来源:
网站 做 app,公众号如何推广宣传,什么是网站ui设计,公司网站建设亚运村来源#xff1a;牛客网#xff1a;
时间限制#xff1a;C/C 1秒#xff0c;其他语言2秒
空间限制#xff1a;C/C 131072K#xff0c;其他语言262144K
Special Judge, 64bit IO Format: %lld文章目录题目描述题解#xff1a;代码#xff1a;题目描述 给一个没有重边的二…来源牛客网
时间限制C/C 1秒其他语言2秒
空间限制C/C 131072K其他语言262144K
Special Judge, 64bit IO Format: %lld文章目录题目描述题解代码题目描述 给一个没有重边的二分图, 要求给边染色. 有公共点的边不能同色. 问最少用多少种颜色, 并任意构造一组方案. 输入描述: 第一行两个数n和m表示图的点数和边数(0n1001,0m2001). 之后m行每行2个数表示一条边的两个端点. 点从1编号到n. 保证给的是二分图. 输出描述: 第一行一个数k表示需要多少种颜色. 接下来m行每行一个数表示输入的边的颜色. 按照输入的顺序输出, 颜色从1编号到k. 示例1 输入
4 4
1 2
1 3
2 4
3 4输出
2
1
2
2
1题解
题目要求有公共点的边不能同色最后要求最少的颜色数 所以有公共点的边我们就让他同色 二分图匹配给定一个二分图G在G的一个子图M中M的边集{E}中的任意两条边都不依附于同一个顶点则称M是一个匹配。也就是匹配出没有共同点的边 边数最大的子图就是最大匹配 所以我们可以多次调用二分图最大匹配比如匈牙利算法为每次匹配出来的边附上色直到全部匹配 但是有的边可能在多次最大匹配中都可以被匹配上怎么保证最优呢 根据题意每个点所连的边颜色各不相同所以答案就是度数最大的那个点所以每次匹配有限从度数大的开始匹配 具体为什么从最大度下手可以从反证法假设从最小度开始匹配会怎么样。也可以看看官方解释
代码
#includebits/stdc.h
using namespace std;
const int maxn1e69;
int d[maxn];//点i的度数
int x[maxn],y[maxn];
int id[maxn],col[1040][1040];
vectorintg[maxn];
bool vis[maxn];
int match[maxn];
int n,m;bool cmp(int x,int y)
{return d[x]d[y];
}
bool dfs(int u)
{for(auto v:g[u]){if(!vis[v]){vis[v]1;if(match[v]0||dfs(match[v])){match[v]u;match[u]v;return 1;}}}return 0;
}
void init()
{memset(match,0,sizeof(match));sort(id1,id1n,cmp);
}
int main()
{cinnm;int ans0;for(int i1;im;i){cinx[i]y[i];d[x[i]];d[y[i]];ansmax(ans,max(d[x[i]],d[y[i]]));}for(int i1;in;i)id[i]i;for(int i1;ians;i){for(int j1;jm;j)if(!col[x[j]][y[j]])//该边还未被标记 {g[x[j]].push_back(y[j]);//存边 g[y[j]].push_back(x[j]);}init();for(int j1,kid[j];jn;j,kid[j])//从度数最大的开始下手 {if(!match[k]) {memset(vis,0,sizeof(vis));dfs(k);}}for(int j1;jn;j)//对每一次最大匹配进行染色 {if(match[j])//如果j已经匹配 {col[j][match[j]]i;//染上色 d[j]--;}g[j].clear();}}coutansendl;for(int i1;im;i)coutcol[x[i]][y[i]]endl;return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/85843.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!