Safari Park

染色问题:先建图。然后给每个顶点涂色,就是把顶点编号改一下。然后针对每个顶点,判断相邻顶点编号是否和当前顶点编号一致,如果一致,说明颜色相同。
方法一:邻接表实现。由于邻接表只能存储终点编号(好像也可以在结构体里存储起始顶点编号,懒得改了),所以还要一个数组存放当前顶点编号。

#include <iostream>
#include <vector>
#include <set>
using namespace std;
const int maxv = 510;
int a[maxv];    //存放顶点的颜色,即动物种类。a[1]=3意为1号顶点颜色编号为3
struct node{
    int v;  //边终点颜色编号
};

vector<node> G[maxv];
set<int> st;
node no[maxv];  //存放当前顶点颜色编号



int main() {
    int n,r,k,m, v1, v2;
    scanf("%d%d%d", &n, &r, &k);
    for(int i=0; i<r; i++){
        scanf("%d%d", &v1, &v2);
        G[v1].push_back(node{v2});
        G[v2].push_back(node{v1});
    }
    scanf("%d", &m);
    //int v;
    for(int i=1; i<=m; i++){
        for(int j=1; j<=n; j++){
            scanf("%d", &a[j]);
            no[j].v = a[j];
            st.insert(a[j]);
        }
        if(st.size()>k)         printf("Error: Too many species.\n");
        else if(st.size()<k)    printf("Error: Too few species.\n");
        else{
            for(int j=1; j<=n; j++){//给顶点涂色
                for(int q=0; q<G[j].size(); q++){
                    int v = G[j][q].v;
                    G[j][q].v = a[v];
                }
            }
            bool flag = true;
            for(int j=1; j<=n; j++){//判断相邻顶点颜色是否相同
                for(int q=0; q<G[j].size(); q++){
                    v1 = no[j].v;
                    v2 = G[j][q].v;
                    if(v1==v2){
                        flag = false;
                        break;
                    }
                }
                if(flag==false) break;
            }
            if(flag)    printf("Yes\n");
            else    printf("No\n");
        }
        st.clear();
    }
    return 0;
}

方法二:邻接矩阵实现。由于最大顶点只有500个,寻找每个相邻顶点最大复杂度为O(250000),这是可以接受的。G[1][3]=1,第1,3号顶点相邻,要涂色的话只需把1,3改为要涂的颜色即可。假设1号顶点涂5,3号顶点也涂5,只需另创建一个邻接矩阵让G2[5][5]=1即可。然后对G2进行处理。

#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
const int maxv = 510;
int G[maxv][maxv], G2[maxv][maxv];
int a[maxv];  //存储每个顶点的颜色
set<int> st;

int main() 
{
    fill(G[0], G[0]+maxv*maxv, 0);
    fill(G2[0], G2[0]+maxv*maxv, 0);
    int n,r,k,m, v1, v2;
    scanf("%d%d%d", &n, &r, &k);
    for(int i=0; i<r; i++){
        scanf("%d%d", &v1, &v2);
        G[v1][v2] = G[v2][v1] = 1;
    }
    scanf("%d", &m);
    //int v;
    for(int i=1; i<=m; i++){
        for(int j=1; j<=n; j++){
            scanf("%d", &a[j]);
            st.insert(a[j]);
        }
        if(st.size()>k)         printf("Error: Too many species.\n");
        else if(st.size()<k)    printf("Error: Too few species.\n");
        else{
            bool flag = true;
            for(int j=1; j<=n; j++){
                for(int q=1; q<=n; q++){
                	//如果相邻顶点涂色相同
                    if(G[j][q]==1 && a[j]==a[q])    flag = false;
                }
            }
            if(flag)    printf("Yes\n");
            else    printf("No\n");
        }
        st.clear();
        fill(G2[0], G2[0]+maxv*maxv, 0);
    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Selenium是一个用于自动化浏览器操作的工具。在使用Selenium进行safari浏览器自动化测试时,需要进行一些配置才能成功启动safari浏览器。 首先,你需要在safari浏览器中开启远程自动化选项。具体操作如下:打开safari浏览器,点击"Safari"菜单,选择"Preferences",点击"Advanced"选项卡,在菜单栏中勾选"Show Develop menu in menu bar",然后在菜单栏中选择"Develop",再勾选"Allow Remote Automation"。 接下来,你可以使用Python或Ruby等编程语言来编写启动safari浏览器的代码。以下是Python和Ruby的示例代码: Python示例代码: ```python from selenium import webdriver from selenium.webdriver.safari.options import Options from time import sleep options = Options() driver = webdriver.Safari(options=options) driver.get("https://www.baidu.com") sleep(5) driver.quit() ``` Ruby示例代码: ```ruby require 'selenium-webdriver' driver = Selenium::WebDriver.for :safari driver.get('https://www.selenium.dev/selenium/web/web-form.html') sleep 5 driver.quit() ``` 需要注意的是,在使用Selenium启动safari浏览器时,可能会遇到错误信息"Could not create a session: You must enable the 'Allow Remote Automation' option in Safari's Develop menu to control Safari via WebDriver."。这通常是因为没有开启safari浏览器的"Allow Remote Automation"选项。确保按照上述步骤正确配置后,即可成功启动safari浏览器进行自动化测试。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [[selenium]关于使用selenium启动safari浏览器](https://blog.csdn.net/weixin_45975639/article/details/130152927)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Safari浏览器自动化测试,Python脚本控制自动化测试](https://blog.csdn.net/weixin_44786530/article/details/129729261)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值