基础组芝士大乱炖5——树与图

前言

这几天要毕业考,Gesp6级,还有初中分班考,所以这可能是7月前最后一个帖子,不过暑假大概率还是会更的(除非回老家玩,但8月还是要回来集训的)

树的概念

{5E722C63-C0D9-4E03-A7A8-2F294093AE95}

例:

1b06610b-d80f-4f4d-abcd-fcb60dbb7690

图的概念

image
其实说白了就是树的阉割版本

难度其实并不大,但考试遇到就像上国道遇到大运一样。
加上后来……

最短路
dfs/bfs
树状DP
树上二分
…………
考试遇到直接坠机(其实没那么夸张)

有人问了,怎么储存?

image

image

又有人问了,怎么Dfs,Bfs?

(伪)代码不给多了 交给老师的PPT了,欸沃屮,找不到了

void dfs(xx)
{
	for(现在位置一步就可以到达的点)
	{
		if(没走过)
        { 
             走
        }
	}
}
void bfs(xx)
{
	queue<int> a;
	a.push(起点);
	bool vis[100001] = {false};
	vis[起点] = true;
	while(有点可以走)
	{
		int y = a.front();//取下可以到达的点
		a.pop();
		for(下一步可以到达的点)
		{
			if(没走过)
			{
				走
			}
		}
	}
}

最后

各位可以帮我圆个基础梦吗?(自己懒得补)
image
WA20

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,m,u,v,maxn,q;
	vector<int> g[1000001];
	cin>>n>>m;
	for(int i = 1;i <= m;i++)
	{
		cin>>u>>v;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	for(int i = 1;i <= n;i++)
	{
		if(g[i].size() != 2)
		{
			q++;
		}
		if(g[i].size() == n-1)
		{
			cout<<"Flower";
		}
	}
	if(q == 0)
	{
		cout<<"Ring";
	}
	else if(q == 2)
	{
		cout<<"Chain";
	}
	else
	{
		cout<<"Neither";
	}
	return 0;
} 

呃,自己没过题目就来经验分享区……