麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

1034. Head of a Gang

2019-11-10 19:39:35
字體:
來源:轉載
供稿:網友

考察并查集。發現并查集什么都不會呀。。。

查看了大神的代碼感覺自己太弱了 http://blog.csdn.net/sunbaigui/article/details/8657148

代碼照抄的 就是注釋了下。留著當筆記吧。 學習了下map set 迭代器 的使用 還是有點不熟練,還要多練。。

感覺這里開始PAT題的類型突然變了。。

#include <iostream>#include <string>#include <vector>#include <map>#include <set>#include <algorithm>#define MAX 1010using namespace std;struct Call {	string p1, p2;	int time;};struct Node {	int weight, parent;};struct Gang {	int head, num, sum, maxw;	Gang() { head = -1; num = 0; sum = 0; maxw = -1; }};vector <Call> list;vector <Node> p; //并查集set <string> name;map <string, int> str2int;map <int, string> int2str;int NameNum;int N, threthold;void InitSet() {	p.resize(NameNum);	for (int i = 0; i < NameNum; i++) {		p[i].parent = i; p[i].weight = 0; //當父母為自己時為根節點	}}//結點壓縮//		①					 ①//		|				   /   ///		②   壓縮成		 ②		③//		|//		③void ComPRessSet(int top, int x) { //路徑壓縮    	if (top != p[x].parent) {//不是并查集的根結點		CompressSet(top, p[x].parent); //繼續壓縮		p[x].parent = top;	}}int FindSet(int x) {//查找根節點	if (x != p[x].parent) { //不是根結點		int top = FindSet(p[x].parent); //top為根結點		CompressSet(top, x); //壓縮結點	}	return p[x].parent;//返回根節點}void UnionSet(int x, int y) {	int a = FindSet(x);	int b = FindSet(y);	p[a].parent = b;}bool cmp(Gang g1, Gang g2) {	return int2str[g1.head] < int2str[g2.head];}int main() {	cin >> N >> threthold;	Call temp;	for (int i = 0; i < N; i++) {		cin >> temp.p1 >> temp.p2 >> temp.time;		list.push_back(temp);		name.insert(temp.p1);		name.insert(temp.p2);	}	NameNum = name.size();	//名字轉換為編號	set<string>::iterator it;	int id = 0;	for (it = name.begin(); it != name.end(); it++, id++) {		str2int[*it] = id;		int2str[id] = *it;	}	InitSet();	for(int i = 0; i < list.size(); i++){		int u = str2int[list[i].p1];		int v = str2int[list[i].p2];		p[u].weight += list[i].time;		p[v].weight += list[i].time;		UnionSet(u, v);	}#ifdef _DEBUG	for (int i = 0; i < p.size(); i++) {		cout << int2str[i] << " " << int2str[p[i].parent] << " " << int2str[FindSet(i)] << endl;	}#endif	map <int, Gang> allset; // fitst = int second = Gang	map <int, Gang>::iterator it2;	for (int i = 0; i < NameNum; i++) {		int top = FindSet(i);		it2 = allset.find(top);//查找根節點的幫會集合		if (it2 != allset.end()) {			allset[top].sum += p[i].weight;			allset[top].num++;			if (p[i].weight > allset[top].maxw) {				allset[top].maxw = p[i].weight;				allset[top].head = i;			}		}		else {//沒有 新建幫會			Gang temp;			temp.head = i; temp.maxw = p[i].weight;			temp.num = 1; temp.sum = p[i].weight;			allset[top] = temp;		}	}	vector <Gang> gang;	for (it2 = allset.begin(); it2 != allset.end(); it2++) {		if (it2->second.sum > 2 * threthold && it2->second.num > 2)			gang.push_back(it2->second);	}	sort(gang.begin(), gang.end(), cmp);	cout << gang.size() << endl;	for (int i = 0; i < gang.size(); i++) {		cout << int2str[gang[i].head] << " " << gang[i].num << endl;	}	system("pause");	return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久成人综合视频 | 欧美日韩亚洲国产精品 | 插插操| 中文字幕在线免费 | www.91在线观看 | 久久精品4 | 国产精品爆操 | 中文字幕一区2区 | 国产激情精品一区二区三区 | 永久免费不卡在线观看黄网站 | 快播av在线 | 国产精品视频免费在线观看 | 久久精品九九 | 久在线播放 | 激情久久免费视频 | 国产在线欧美日韩 | 亚洲精品一区国产精品丝瓜 | 日韩一级免费毛片 | 国产高潮好爽好大受不了了 | 香蕉秀| 免费激情视频网站 | 91久久综合 | 91 免费视频| 福利在线免费视频 | 国产精品999在线观看 | 手机免费看一级片 | 日韩中文字幕一区二区三区 | 成人精品视频网站 | 九九热这里只有精品8 | 日本欧美一区二区三区在线观看 | 亚州精品在线视频 | 爽爽视频免费看 | 国产一区二区视频网站 | 嫩呦国产一区二区三区av | 亚洲网站在线观看 | 天天色综合6 | 成人一级免费视频 | 日韩不卡一区二区 | 欧美成人一区二区视频 | www国产成人免费观看视频,深夜成人网 | 久久91精品国产91久久yfo |