码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj2558

时间:2017-08-19 12:40:50      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:颜色   space   计算   clu   std   lap   int   比较   include   

哈希+拓扑排序

题意比较绕,先开始没看懂就看了发程序,发现好像理解的不太一样,后来找到了一个题目解释。。。

摘自jcvb:其实就是说颜色相同且三个出口分别对应相同(注意有可能是合并后才相同)两个结点是相同的,可以合并,求最后合并完后剩下几个结点。

所以我们倒着计算一个房间是否和以前相同,因为有可能合并(这是看了题意才知道)导致两个房间变成一个,然后可一个到这个房间的房间的邻接表发生变化,导致其他房间可能相邻,又因为原先图就是拓扑的,前面不会影响后面,所以可以倒着合并。

技术分享
#include<bits/stdc++.h>
using namespace std;
const int N = 6010, seed = 19992147;
int n, ans;
char key[N], t[N];
int id[N], Map[N][4];
map<int, int> mp;
int main()
{
    scanf("%d", &n);
    ans = n;
    for(int i = 1; i < n; ++i)
    {
        scanf("%s", t);
        key[i] = t[0];
        id[i] = i;
        for(int j = 0; j < 3; ++j) scanf("%d", &Map[i][j]);
    }
    for(int i = n - 1; i; --i)
    {
        int h = key[i];
        for(int j = 0; j < 3; ++j) h = h * seed + id[Map[i][j]];
        if(mp.find(h) != mp.end()) id[i] = mp[h], --ans;
        else mp[h] = id[i]; 
    }    
    printf("%d\n", ans);
    return 0;
}
View Code

 

bzoj2558

标签:颜色   space   计算   clu   std   lap   int   比较   include   

原文地址:http://www.cnblogs.com/19992147orz/p/7395624.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!