首页 > 其他分享 >[AT_tenka1_2015_final_g] 天下一ゲーム

[AT_tenka1_2015_final_g] 天下一ゲーム

时间:2025-01-18 15:22:42浏览次数:1  
标签:int edge tenka1 read num 2015 getchar final define

评价:感觉还是过于神秘了,暴力写的群魔乱舞,正解返璞归真。

暴力做法太多了,就不记录了。

我们考虑一个贪心,由于边权互不相同,我们把边按照边权从大到小排序,然后依次尝试满足当前边,这样显然是极其优秀的,因为你满足了当前边,后面的边的最小值仍未确定,也就是可以继续解决的。

而唯一可能影响情况的,就是当前边两个点都是第一次出现,这个操作就不是唯一的,而这个暴力解决就行了,因为这类边最多只有 \(\frac{n}{2}\),所以复杂度是 \(O(2^{\frac{n}{2}})\)。(想到这个贪心就迎刃而解了)。

点击查看代码
#include<bits/stdc++.h>
#define fir first
#define sec second
#define mkp make_pair
#define lowbit(x) x&(-x)
using namespace std;
typedef pair<int,int> pir;
inline int read(){
    int x=0,f=1; char c=getchar();
    while(!isdigit(c)){if(c=='-') f=-1; c=getchar();}
    while(isdigit(c)){x=x*10+(c^48); c=getchar();}
    return x*f;
}
const int N=45,inf=1e9;
int n,m;
int mx[N],val[N];
struct edge{int u,v,w;}p[N*N];
inline bool cmp(edge a,edge b){
    return a.w>b.w;
}

int s;
int num[N],vis[N],res[N];
signed main(){
    n=read(),m=read();
    for(int i=1;i<=m;i++){
        int u=read(),v=read(),w=read();
        mx[u]=max(mx[u],w);
        mx[v]=max(mx[v],w);
        p[i]={u,v,w};
    }
    sort(p+1,p+m+1,cmp);
    for(int i=1;i<=m;i++){
        int u=p[i].u,v=p[i].v;
        if(vis[u]||vis[v]) continue;
        num[s++]=u;
        vis[u]=1,vis[v]=1;
    }
    int st=1<<s;
    int ans=-1;
    for(int msk=0;msk<st;msk++){
        for(int i=1;i<=n;i++) val[i]=inf;
        for(int i=0;i<s;i++) if(msk>>i&1) val[num[i]]=mx[num[i]];
        int cnt=0;
        for(int i=1;i<=m;i++){
            int u=p[i].u,v=p[i].v,w=p[i].w;
            if((val[u]==inf)^(val[v]==inf)){
                if(val[u]==inf) val[u]=w;
                if(val[v]==inf) val[v]=w;
                cnt++;
            }
        }
        if(ans<cnt){
            ans=cnt;
            for(int i=1;i<=n;i++) res[i]=val[i];
        }
    }
    for(int i=1;i<=n;i++) cout<<res[i]<<'\n';
}

标签:int,edge,tenka1,read,num,2015,getchar,final,define
From: https://www.cnblogs.com/Cyan0826/p/18678480

相关文章

  • 洛谷题单指南-线段树的进阶用法-P3168 [CQOI2015] 任务查询系统
    原题链接:https://www.luogu.com.cn/problem/P3168题意解读:一个任务管理系统,能够查询在某个时间点运行的任务中优先级最小的k个任务的优先级之和。解题思路:由于总时间n不超过100000,考虑针对所有时刻建立可持久化线段树,根节点为root[i]的线段树维护时刻i的任务情况,节点区间表示......
  • 在try中加return还会执行finally么
    在日志中很清晰的表现了,先执行try的日志,再执行finally内的日志,最后打印try中return的返回值为什么return没有拦截finally呢?try块中的返回操作:return指令会将返回值准备好。但是返回值并不会立刻返回,而是先将当前栈帧(包含try代码块中计算的返回值)保存。执行finally......
  • vulnhub靶场【DC系列】之9 the final 结束篇
    前言靶机:DC-8,IP地址为192.168.10.11,后续因为靶机重装,IP地址变为192.168.10.13攻击:kali,IP地址为192.168.10.2都采用VMWare,网卡为桥接模式对于文章中涉及到的靶场以及工具,我放置在网盘中,链接:https://pan.quark.cn/s/54b7df0c84e1主机发现使用arp-scan-l或者netdiscover......
  • 2015天津安置考
    天津安置考通常指的是天津高一安置考,是针对具有天津市户籍但在外省市普通高中就读的学生,在高一下学期转学回津时参加的统一考试1。以下是详细介绍:考试目的 为因各种原因错过在天津正常入学机会的学生提供在天津继续高中学业并参加高考的资格,依据考试成绩和志愿分配就读学校3。......
  • 【Java从入门到放弃 之 final 关键字】
    final关键字final关键字final字段final函数列表中的参数final方法final类final关键字Java中里面有final这个关键字,这个关键字总体上是用来表达”不能被改变“这个意思的。我们使用这个关键字表达不能被改变,有两种使用场景,有三个使用位置。使用场景设计上......
  • P8037 [COCI2015-2016#7] Prokletnik 题解
    题意定义一个区间$l,r$为好的当且仅当最小值为$a_l$且最大值为$a_r$或最大值为$a_l$且最小值为$a_r$。我们先考虑最小值为$a_l$且最大值为$a_r$的,另一个我们翻转过来在搞一遍就好了。先考虑将询问离线按$r$排序,容易发现,对于每个右端点$r$对应的合法左端点是......
  • 洛谷P2670 [NOIP2015 普及组] 扫雷游戏
    一、原理此代码旨在解决扫雷游戏中根据给定的雷区地雷分布情况,计算出每个非地雷格周围的地雷数量,并输出完整雷区信息的问题。核心原理是通过遍历二维的雷区表示数组,针对每个非地雷格,检查其周围八个方向(上、下、左、右、左上、右上、左下、右下)上的格子是否为地雷格(以 * 表示......
  • FinalShell破解
    FinalShell激活码在线生成在线地址:https://www.apibug.com/zxtools/finalshell#新版FinalShell算法已经修改,请在右方下载老版本.Windows版本下载MacOs版本下载简单使用教程:打开你的FinalShell,点击左下角灰字激活/升级,打开登录界面。账号密码栏各随便扣几个字,不要点登录,点......
  • Final Boss(二分答案)
    原题链接:Problem-F-Codeforces思路:二分答案代码:#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintxmmm=2e5+10;inta[xmmm],b[xmmm];intn,m;intcheck(intx){intsum=0;for(inti=1;i<=n;i++){sum+=(1+(x-......
  • 【Java基础-31】Java中的final关键字:深入理解与应用
    在Java编程中,final关键字是一个非常重要的修饰符,它可以用于类、方法、变量等不同的场景。final关键字的主要作用是表示“不可变”,即一旦被final修饰,其所修饰的实体将不能被进一步修改或继承。本文将深入探讨final关键字的使用场景及其背后的设计思想,帮助开发者更好地理解和......