日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > Vijos1022. Victoria的舞會2

Vijos1022. Victoria的舞會2

來源:程序員人生   發布時間:2014-09-29 16:01:59 閱讀次數:2818次

試題請參見: https://vijos.org/p/1022

題目概述

Victoria是一位頗有成就的藝術家, 他因油畫作品《我愛北京天安門》聞名于世界. 現在, 他為了報答幫助他的同行們, 準備開一個舞會. 
Victoria準備邀請n個已經確定的人, 可是問題來了:
這n個人每一個人都有一個小花名冊, 名冊里面寫著他所愿意交流的人的名字. 比如說在A的人名單里寫了B, 那么表示A愿意與B交流;但是B的名單里不見的有A, 也就是說B不見的想與A交流. 但是如果A愿意與B交流, B愿意與C交流, 那么A一定愿意與C交流. 也就是說交流有傳遞性. 
Victoria覺得需要將這n個人分為m組, 要求每一組的任何一人都愿意與組內其他人交流. 并求出一種方案以確定m的最小值是多少. 
注意:自己的名單里面不會有自己的名字. 

輸入

第一行一個數n. 接下來n行, 每i+1行表示編號為i的人的小花名冊名單, 名單以0結束. 1<=n<=200. 

輸出

一個數, m.

解題思路

赤裸裸的并查集. 我將每個人想交流的人存在一個 n x n的boolean類型數組(gang)中.

不過有兩點需要注意:

1. 如何解決閉包的傳遞性

2. 解決有向性問題

    對于每一個人(i)檢查他想交流的人(j)是否也愿意和他交流(gang[i][j] == true && gang[j][i] == true). 如果不是這樣, 需要將gang[i][j]置為false.

遇到的問題

閉包傳遞性的問題未能以較高效率解決, 因此有2個點超時.
改進之后可以AC.

源代碼

#include <iostream> #include <fstream> int main() {     using std::cin;     // std::ifstream cin;     // cin.open("input.txt");     const int SIZE = 200;     int n = 0;     bool gang[SIZE][SIZE] = {0};     int groups[SIZE] = {0};     // Initialize     for ( int i = 0; i < SIZE; ++ i ) {         groups[i] = i;     }     // Input     cin >> n;     for ( int i = 0; i < n; ++ i ) {         int person = 0;         while ( cin >> person ) {             if ( person != 0 ) {                 gang[i][person - 1] = true;             } else {                 break;             }         }     }     // Processing     for ( int k = 0; k < n; ++ k ) {         for ( int i = 0; i < n; ++ i ) {             for ( int j = 0; j < n; ++ j ) {                 if ( gang[i][k] && gang[k][j] ) {                     gang[i][j] = true;                 }             }         }     }     for ( int i = 0; i < n; ++ i ) {         for ( int j = 0; j < n; ++ j ) {             if ( gang[i][j] && !gang[j][i] ) {                 gang[i][j] = false;             }         }     }     for ( int i = 0; i < n; ++ i ) {         for ( int j = i + 1; j < n; ++ j ) {             if ( gang[i][j] ) {                 groups[j] = groups[i];             }         }     }     // Output     int numberOfGroups = 0;     for ( int i = 0; i < n; ++ i ) {         if ( groups[i] == i ) {             ++ numberOfGroups;         }     }     std::cout << numberOfGroups << std::endl;     return 0; }
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品高 | 黄色在线视频网站 | 涩视频 | 日本一区二区三区久久久 | 国产伦精品一区二区三区视频黑人 | 欧美成人小视频 | 欧美髙清性xxxxhdvid | 国产日韩一区二区三区 | 国产麻豆成人传媒免费观看 | 久久久成人av| 精品视频一二三区 | 欧美精品久久久久久久久久 | 欧美日韩综合在线 | 性视频网址 | 亚洲免费高清 | 视频一区亚洲 | 国产超碰人人爽人人做人人爱 | 久精品视频 | 国产精品久久久久久久久久尿 | 久人久人久人久久久久人 | 久久久亚洲精品视频 | 国产高清精品在线 | h黄视频 | 国产日韩视频在线 | 久草免费在线 | 嫩草在线看| 最近中文字幕在线观看视频 | 午夜一区二区三区 | 婷婷99狠狠躁天天躁中文字幕 | av免费观看在线 | 少妇18xxxx性xxxx片 | 亚洲免费三级 | 久久精品福利 | 成人动漫视频 | 国产视频福利 | 欧美亚洲一二三 | 成人av.com| 国产一区色 | 久久久观看 | 中文字幕一区二区三区在线播放 | 91视频在线看 |