当前位置: 首页 > news >正文

Codeforces - 1198C - Matching vs Independent Set - 贪心

https://codeforces.com/contest/1198/problem/C

要选取一个大小大于等于n的匹配或者选取一个大小大于等于n的独立集。

考虑不断加入匹配集,最终加入了x条边。

那么剩下的点之间是没有边可以加的,否则匹配数还会增加,也就是剩下的点要么没有边可以连,要么这些边去往的点都在匹配里面。

考虑x>=n,之间输出。

否则x<n,则剩下的点至少有3n-2x个,这些全部选上也>=n,连匹配里面的点都不需要动(因为匹配里面的点可能会和匹配外的点有边连通)。

其实看见有3*n个点应该反应到是要为什么这样搞的。

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

bool vis[300005];
int eid[500005], etop;

void init(int n, int m) {
    memset(vis, 0, sizeof(vis[0]) * (3*n + 1));
    etop = 0;
}

void update(int i) {
    int u, v;
    scanf("%d%d", &u, &v);
    if(vis[u] || vis[v])
        return;
    else {
        vis[u] = vis[v] = 1;
        eid[++etop] = i;
    }
}

void Matching(int n) {
    puts("Matching");
    for(int i = 1; i <= n; ++i) {
        printf("%d%c", eid[i], " \n"[i == n]);
    }
}

void IndSet(int n) {
    puts("IndSet");
    int cnt = 0;
    for(int i = 1; i <= 3 * n; ++i) {
        if(!vis[i]) {
            ++cnt;
            printf("%d%c", i, " \n"[cnt == n]);
            if(cnt == n)
                return;
        }
    }
}

int main() {
#ifdef Yinku
    freopen("Yinku.in", "r", stdin);
#endif // Yinku
    int T;
    scanf("%d", &T);
    int n, m;
    while(T--) {
        scanf("%d%d", &n, &m);
        init(n, m);
        for(int i = 1; i <= m; ++i) {
            update(i);
        }
        if(etop >= n) {
            Matching(n);
        } else {
            IndSet(n);
        }
    }
}

以前没怎么接触过什么匹配、独立集,不会做才正常。

转载于:https://www.cnblogs.com/Yinku/p/11286332.html

相关文章:

  • 如何编写实施方案
  • 智能家居-思维的又一次跳跃
  • nginx配置虚拟主机,代理服务器
  • 去除HTML代码得函数
  • sql 插入数据 返回ID
  • 2019牛客暑期多校训练营(第五场) - C - generator 2 - BSGS
  • How does dbms_stats default granularity AUTO Work?
  • 模板 - SG函数
  • 浪潮之巅第三章 — “水果”公司的复兴 (乔布斯和苹果公司)
  • SCUT - 11 - 被钦定的选手 - 质因数分解
  • notify官方详解
  • heartbeat与lvs和realserver的结合
  • Windows Phone 7 Silverlight开发试玩
  • 我命由我不由天
  • git用法记录
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • C# 免费离线人脸识别 2.0 Demo
  • java中具有继承关系的类及其对象初始化顺序
  • MaxCompute访问TableStore(OTS) 数据
  • SpiderData 2019年2月13日 DApp数据排行榜
  • SSH 免密登录
  • 代理模式
  • 高性能JavaScript阅读简记(三)
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 坑!为什么View.startAnimation不起作用?
  • 软件开发学习的5大技巧,你知道吗?
  • 用element的upload组件实现多图片上传和压缩
  • 你对linux中grep命令知道多少?
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #etcd#安装时出错
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (2020)Java后端开发----(面试题和笔试题)
  • (Matlab)使用竞争神经网络实现数据聚类
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (十六)一篇文章学会Java的常用API
  • (四)JPA - JQPL 实现增删改查
  • (一)WLAN定义和基本架构转
  • (转)visual stdio 书签功能介绍
  • (转)甲方乙方——赵民谈找工作
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .net 中viewstate的原理和使用
  • .net反编译的九款神器
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • @在php中起什么作用?
  • [ linux ] linux 命令英文全称及解释