zoukankan      html  css  js  c++  java
  • 相似度

    题目描述

    小G通过摆放一些城市和道路构成了一个世界地图。趁着小G出去玩的时候,大G把小G的世界地图上的城市全部打乱并放在了原来这些城市所在的位置(并不是一一对应),又修改了一些道路。小G玩完回来后发现自己的东西被打乱了,感到非常生气,但是他又被一个更有趣的问题吸引了:被修改之后的世界地图与原来的世界地图的最大相似度是多少?
       (ps:相似度的定义为将城市还原后还有多少条道路和之前的道路相同)

    输入

    第一行为两个整数n,m,表示一共有n个城市,m条道路
    接下来m行,每行两个整数x,y,表示原来小G的世界地图中有一条道路连接编号为x和y的两个城市。
    紧接着m行,每行两个整数x’,y’,表示被大G修改后的世界地图中有一条道路连接编号为x’和y’的两个城市。
    输出

    一行一个整数,表示最大相似度。

    输入样例

    4 5
    4 3
    2 1
    3 2
    2 4
    2 3
    1 4
    3 2
    2 1
    1 3
    4 4
    输出样例


    说明

    【样例解释】
    原图中的1,2,3,4号城市分别对应现在图中的4,1,2,3 将修改后的图还原 1 4->2 1 3 2->4 3 2 1->3 2 1 3->2 4 4 4->1 1 与原图比较发现有4条边是一样的。

    【数据规模和约定】
    对于30%的数据,1 ≤ n ≤ 3,1 ≤ m≤ 20。 对于60%的数据,1 ≤ n ≤ 7,1 ≤ m≤ 70。 对于100%的数据,1 ≤ n ≤ 9,1 ≤ m≤ 300。
    .
    .
    .
    .
    .
    程序:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    bool bz[10];
    int n,m,ans=0,sz[10],t1[10][10],t2[10][10];
    
    int read()
    {
    	int w=0;
    	char ch=getchar();
    	while (ch<'0'||ch>'9') ch=getchar();
    	while (ch>='0'&&ch<='9')
    	{
    		w=w*10+(ch-'0');
    	  	ch=getchar();
    	}
    	return w;
    }
    
    void work()
    {
    	int sum=0;
    	for(int i=1;i<=n;i++)
    	 	for(int j=1;j<=n;j++)
    	  		sum+=min(t1[i][j],t2[sz[i]][sz[j]]);
    	ans=max(ans,sum);
    	return;
    }
    
    void dfs(int wz)
    {
    	if (wz>n)
    	{
    	  	work();
    	  	return;
    	}
    	for (int i=1;i<=n;i++)
    	  	if (bz[i]==false)
    	  	{
    	  		sz[wz]=i;
    	    	bz[i]=true;
    	    	dfs(wz+1);
    	    	bz[i]=false;
    	  	}
    	return;
    }
    
    int main()
    {
    	n=read();
    	m=read();
    	for (int i=1;i<=m;i++)
    	{
    	  	int x=read(),y=read();
    	  	t1[x][y]++;
    	}
    	for (int i=1;i<=m;i++)
    	{
    	  	int x=read(),y=read();
    	  	t2[x][y]++;
    	}
    	memset(bz,false,sizeof(bz));
    	dfs(1);
    	printf("%d",ans);
    	return 0;
    }
    
  • 相关阅读:
    Java实现 计蒜客 拯救行动
    Java实现 计蒜客 拯救行动
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 173 二叉搜索树迭代器
    Java实现 LeetCode 173 二叉搜索树迭代器
    Visual Studio的SDK配置
    怎样使用CMenu类
    mfc menu用法一
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/10292848.html
Copyright © 2011-2022 走看看