全部评论
//顺丰 学术交流AC代码 #include<iostream> using namespace std; typedef char VertexType; typedef int WeightType; #define MAXVEX 200002 #define MAXEDGE 100001 #define MYINFINITY 65535 int numPeople = 0, numLang = 0, numInfo = 0; int numMachine = -1; typedef struct Node { int adjVex; struct Node* next; }EdgeNode; typedef struct { EdgeNode* firstEdge; }Vertex; typedef struct { Vertex vexList[MAXVEX]; int numVertex, numEdge; }MGraph; void CreateMGraph(MGraph* G) { G->numVertex = numPeople+numLang; for (int i = 0; i < G->numVertex; i++) { G->vexList[i].firstEdge = NULL; } G->numEdge = numInfo; for (int k = 0; k < G->numEdge; k++) { int i = 0, j = 0;; cin >> i >> j; j = j + 100000; EdgeNode* p = new(EdgeNode); p->adjVex = j; p->next = G->vexList[i].firstEdge; G->vexList[i].firstEdge = p; p = new(EdgeNode); p->adjVex = i; p->next = G->vexList[j].firstEdge; G->vexList[j].firstEdge = p; } } void DFS(MGraph& G, int i, bool* visited) //极大连通子图的深度优先遍历 { visited[i] = true; EdgeNode* p = G.vexList[i].firstEdge; while (p != NULL) { if (visited[p->adjVex] == false) DFS(G, p->adjVex, visited); p = p->next; } } void DFSTraverse(MGraph& G) //深度优先遍历 { bool visited[MAXVEX]; for (int i = 1; i <=numPeople; i++) visited[i] = false; for (int i = 1; i <=numPeople; i++) if (visited[i] == false) { DFS(G, i, visited); numMachine++; } } int main() { MGraph G; cin >> numPeople >> numLang >> numInfo; if (numInfo == 0) { cout << numPeople ; return 0; } CreateMGraph(&G); DFSTraverse(G); cout << numMachine; system("pause"); return 0; }
今天才投的顺风,没收到笔试通知,感觉这题是并查集,先遍历一遍,建好并查集,然后计算并查集的个数。所需的机器数等于并查集个数-1
这道题我是算一下非联通区域,然后减一。 AC
第二题终于acl了
不会
我好像理解错题的意思了。根据我的理解,最多只需要两个,任意两个人不能交流,只要让他们学会汉语就行了。
这题并查集可解
codeforces 278c 并查集 留下了没ac的泪水 这题太偏了😂😂😂
我的想法是: m是语言数 找出 会的语言出现频次最高的那个语言就是大家用的公共语言,最大频次记为p 最后答案就是m-p 不知道对不对
1 考虑什么都不会的,至少买一个countA 2 并查集求不同语言数需要的countB 3 return countA+countB
并查集为什么超时了
你的第二题,是我的第一题。。。
为什么我做联通图然后提示我内存溢出...
第一题只能55%,有一样的么😥😥
两题终于都A惹,一题并查集,一题dp
这道题咋做呀
只通过64,第二题
第一题AC,第二题有老哥出结果了吗
全连通图?
第一题有A的吗
相关推荐
点赞 评论 收藏
分享
迷茫的大四🐶:潮水褪去,才知道谁没穿内裤 点赞 评论 收藏
分享

