PTA 1013 Battle Over Cities

探讨了在深度优先搜索(Depth-First Search, DFS)算法中,输入方式对程序运行效率的影响。作者发现使用cin相较于scanf效率更低,导致算法在处理大规模数据时出现超时现象。通过将输入方式从cin改为scanf,成功解决了超时问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这段代码有个测试点超时了,咋看没啥问题,就是dfs的时候,一个顶点会检查所有和他有关联的顶点.
然而当我把一个点的所有关联点组成一个列表之后,依然会超时.这个时候复杂度其实已经比较低了.
那么为啥呢?我找了下网上的代码,一些也是超时,有一个没有超时,逻辑跟我也没啥差距.
只是我用的cin cout,他用的scanf,printf
cin的效率确实比scanf效率差不少,而且这个操作也是o(n)个的
换了之后,不再超时.
c++亦会超时. 稍微有点常识的人都能看出,如果我们继续用java写下去…

#include<iostream>
#include<map>
#include<stdlib.h>
#include<string.h>
using namespace std;
int n,m,k;
int count[1000][1000];
int visited[1000];
void dfs(int index){
visited[index] = 1;
for(int i = 0;i<n;i++){
	if(count[index][i] != 0){
		if(visited[i] == 0){
			visited[i] = 1;
			dfs(i);
		}
	}
}
}
int main(){
cin>>n>>m>>k;
for(int i = 0;i<m;i++){
	int from;
	int to;
	cin>>from>>to;
	count[from-1][to-1] = 1;
	count[to-1][from-1] = 1;
}
for(int i = 0;i<k;i++){
	int cnt = 0;
	int index;
	cin>>index;
	index = index -1;
	memset(visited,0,sizeof(visited));
	visited[index] = 1;
	for(int j = 0;j<n;j++){
		if(visited[j] == 0){
			dfs(j);
			cnt++;
		}
	}
	cout<<cnt-1<<endl;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值