本周学习总结22.5.16-5.22:拓扑排序、最小生成树

本周去医院复查了,没在学校,最近几天在家休养,因为只能吃流食,同时,这不妨碍学习。本周主要还是看博客为主,一个是Dijkstra算法,还有bellman算法,bellman算法是我在P1339 [USACO09OCT]Heat Wave G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)的题解中遇到的,就是无向图求最短路的好方法,主要思想是:首先用结构体存储起点终点和路程(此时要存储两个的,也就是去程和返程,将起点终点调换),之后开始遍历,如果顶点数为n,那么执行n-1次循环,每次遍历所有边,做松弛操作,多亏这个题给的数不多,不会超时。

void bellman(){
	int flag=1,i,j;
	for(j=0;j<n-1&&flag;j++){
		flag=0;
		for(i=0;i<cnt;i++) {
			int u=Edge[i].x,v=Edge[i].y,w=Edge[i].w;
			if(dis[u]+w<dis[v]) {
				flag=1;
				dis[v]=dis[u]+w;
			}
		}
	}
}

主要还是精力不足,回家看病耽误了好多学习时间,落下的课还要补,日语、足球、创新创业、跆拳道等四门课要期末,压力挺大的。

P7228 [COCI2015-2016#3] MOLEKULE - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)这个创建代价最小的有向图,题意是给出了无向边,然后指定方向使得代价最小,题解绝大多数都用的深搜,我用“暴力枚举”,应该是这样吧,我的思路是把每种情况都列举一遍,用二维数组存储指定方向的方案和该方案的编号,并且存储每个方案的代价,所有情况列举一遍之后找出其中代价最小的方案的编号,输出方案,思路是没错,就是超时,我也想过用深搜,不知道该咋实现,题解中有一篇让我豁然开朗

int n,U[N],V[N],dep[N],ans[N];
vector<pair<int,int> > e[N];
inline void dfs(int u,int fa){
	dep[u] = dep[fa]+1;
	for(int i = 0;i<e[u].size();++i){
		int v = e[u][i].first,id = e[u][i].second;
		if(v == fa) continue;
		if(dep[u]%2 == 1) ans[id] = U[id]==u?1:0;
		else ans[id] = U[id]==v?1:0;
		dfs(v,u);
	}
}
int main(){
	n = read();
	FOR(i,1,n-1) U[i] = read(),V[i] = read(),add(U[i],V[i],i);
	dfs(1,0);
	FOR(i,1,n-1) printf("%d\n",(ans[i]+1)&1);
	return 0;
}

 P4673 [BalticOI 2005]Bus Trip - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)这个类似最小生成树的题,遇到好多差不多的这种类型的题,就是从一个地方到另外一个地方求最短距离、时间之类的,不过这个题多了等待的时间,这是坐公交类型的题,从一个地点到另外一个地点的途中,会有等车的时间要算上,难就难在了这个加等车的时间的算法上了,就在这里卡住了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轩Scott

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值