hdu 4781 Beautiful Soup 构造

并不是很难的一个构造,我在比赛的时候把题目读错了,补题的时候想得比较粗糙,迟迟没过这题,之后想法慢慢细致起来,还是将这题过了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define REP(i,a,b) for(int i=a;i<=b;i++)
#define MS0(a) memset(a,0,sizeof(a))

using namespace std;

typedef long long ll;
const int maxn=1000100;
const int INF=1e9+10;

int n,m;
struct Edge
{
    int u,v,w;
    friend bool operator<(Edge A,Edge B)
    {
        return A.w<B.w;
    }
};Edge ans[maxn];int ansn;
int flag;
int cur;
int e[120][120];
bool vis[120][120];
bool used[maxn];

void putA()
{
    REP(i,1,n) REP(j,1,n) e[i][j]=i==j?0:INF;
    ansn=0;
    MS0(vis);MS0(used);
    int sum=0;
    int cur=4;
    int finish=0;
    REP(i,1,n-1){
        if(cur>m){
            finish=1;
            cur=3;
        }
        int j=i+1;
        e[i][j]=cur;
        vis[i][j]=vis[j][i]=1;
        used[cur]=1;
        ans[++ansn]={i,j,cur};
        sum+=cur;
        if(finish) cur+=3;
        else if(i%2) cur++;
        else cur+=2;
    }
    REP(i,1,m){
        if(used[i]) continue;
        if((sum+i)%3==0){
            used[i]=1;
            vis[n][1]=vis[1][n]=1;
            e[n][1]=i;
            ans[++ansn]={n,1,i};
            sum+=i;
            break;
        }
    }
    if(sum%3) flag=-1;
}

void floyd()
{
    REP(k,1,n){
        REP(i,1,n){
            //if(k==i) continue;
            REP(j,1,n){
                //if(j==k||j==i) continue;
                if(e[i][k]+e[k][j]<e[i][j]) e[i][j]=e[i][k]+e[k][j];
            }
        }
    }
}

void putB()
{
    //REP(i,1,n) if(e[i][i%n+1]==INF) cout<<"i="<<i<<" j="<<i%n+1<<" e="<<e[i][i%n+1]<<endl;
    floyd();
    /*
    REP(i,1,n) REP(j,1,n){
        if(e[i][j]==INF) cout<<"i="<<i<<"j="<<j<<" e="<<e[i][j]<<endl;
    }
    */
    REP(i,1,m){
        if(used[i]) continue;
        int tag=0;
        REP(j,1,n){
            REP(k,1,n){
                //if(i==6&&j!=k) cout<<e[j][k]<<" "<<j<<" "<<k<<" "<<vis[j][k]<<endl;
                if(j==k||vis[j][k]||e[j][k]%3!=i%3) continue;
                used[i]=1;
                vis[j][k]=vis[k][j]=1;
                ans[++ansn]={j,k,i};
                tag=1;break;
            }
            if(tag) break;
        }
    }
    //REP(i,1,m) cout<<used[i]<<" ";cout<<endl;
    REP(i,1,m) if(!used[i]) flag=-1;
}

int main()
{
    #ifndef ONLINE_JUDGE
        freopen("in.txt","r",stdin);
    #endif // ONLINE_JUDGE
    int T;cin>>T;int casen=1;
    while(T--){
        scanf("%d%d",&n,&m);
        flag=0;
        putA();
        if(~flag) putB();
        printf("Case #%d:\n",casen++);
        if(flag==-1) puts("-1");
        else{
            sort(ans+1,ans+ansn+1);
            REP(i,1,ansn) printf("%d %d %d\n",ans[i].u,ans[i].v,ans[i].w);
        }
    }
    return 0;
}
/**
7
6 8
5 8
6 9
6 8
10 13
10 14
7 11
4
10 13
10 14
80 83
80 974

*/

时间: 2024-08-05 18:12:55

hdu 4781 Beautiful Soup 构造的相关文章

HDU 4782 Beautiful Soup(模拟)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4782 Problem Description Coach Pang has a lot of hobbies. One of them is playing with "tag soup" with the help of Beautiful Soup. Coach Pang is satisfied with Beautiful Soup in every respect, except

(转)python下很帅气的爬虫包 - Beautiful Soup 示例

官方文档地址:http://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html Beautiful Soup 相比其他的html解析有个非常重要的优势.html会被拆解为对象处理.全篇转化为字典和数组. 相比正则解析的爬虫,省略了学习正则的高成本. 相比xpath爬虫的解析,同样节约学习时间成本.虽然xpath已经简单点了.(爬虫框架Scrapy就是使用xpath) 安装 linux下可以执行 [plain] view plai

python Beautiful Soup 抓取解析网页

Beautiful Soup is a Python library designed for quick turnaround projects like screen-scraping.总之就是一个解析xml和html之类的库,用着还算顺手. 官网地址:http://www.crummy.com/software/BeautifulSoup/ 下面来介绍下使用python和Beautiful Soup 抓取一个网页上的PM2.5数据. PM2.5 数据的网站:http://www.pm25.

(最全)Xpath、Beautiful Soup、Pyquery三种解析库解析html 功能概括

一.Xpath 解析 ? xpath:是一种在XMl.html文档中查找信息的语言,利用了lxml库对HTML解析获取数据. Xpath常用规则:   nodename :选取此节点的所有子节点   // :从当前节点选取子孙节点   / :从当前节点选取子节点   . : 选取当前节点   .. : 选取当前节点父节点  @ : 选取属性 1.初始化html etree.parse()是初始化html构造一个XPath解析对象: etree.tostring()是修复html文件中代码,把缺的

第四部分 解析库的使用(XPath、Beautiful Soup、PyQuery)

在网页节点中,可以定义id.class或其他属性.节点间有层次关系,网页中要通过XPath或CSS选择器定位一个或多个节点.在页面解析时,可利用XPath或CSS选择器提取某个节点,再调用相应方法获取它的正文内容或者属性,就可提取到想要的信息.在python中常用的解析库有lxml.Beautiful Soup.pyquery等.使用这些库可以很大程度上提高效率. 一 使用XPath解析库 XPath,全称XML Path Language,即XML路径语言,是一门在XML文档中查找信息的语言.

[Python]HTML/XML解析器Beautiful Soup

[简介] Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.即HTML/XMLX的解析器. 它可以很好的处理不规范标记并生成剖析树(parse tree). 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作.它可以大大节省你的编程时间. [安装] 下载地址:点击打开链接 Linux平台安装: 如果你用的是新版的Debain或ubuntu,那么可以通过系统的软件包管理来安装: $ apt-get install Python-bs4 B

python标准库Beautiful Soup与MongoDb爬喜马拉雅电台的总结

Beautiful Soup标准库是一个可以从HTML/XML文件中提取数据的Python库,它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式,Beautiful Soup将会节省数小时的工作时间.pymongo标准库是MongoDb NoSql数据库与python语言之间的桥梁,通过pymongo将数据保存到MongoDb中.结合使用这两者来爬去喜马拉雅电台的数据... Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是

爬虫学习——网页解析器Beautiful Soup

一.Beautiful Soup的安装与测试 官方网站:https://www.crummy.com/software/BeautifulSoup/ Beautiful Soup安装与使用文档:  https://www.crummy.com/software/BeautifulSoup/bs4/doc/ 1.首先测试一下bs4模块是否已经存在,若不存在再安装即可,我用的是kali测试发现bs4模块已经存在,下面介绍如何测试与安装 新建python文档输入以下代码 1 import bs4 2

Beautiful Soup的使用

Beautiful Soup简单实用,功能也算比较全,之前下载都是自己使用xpath去获取信息,以后简单的解析可以用这个,方便省事. Beautiful Soup 是用 Python 写的一个 HTML/XML 的解析器,它可以很好的处理不规范标记并生成剖析树.通常用来分析爬虫抓取的web文档.对于 不规则的 Html文档,也有很多的补全功能,节省了开发者的时间和精力. Beautiful Soup 的官方文档齐全,将官方给出的例子实践一遍就能掌握.官方英文文档,中文文档 一 安装 Beauti