这代码为什么会有85pts?
查看原帖
这代码为什么会有85pts?
946515
66xyyd楼主2023/10/30 20:33

RT,代码:

#include<iostream>
#include<vector>
#include<cmath>
#include<queue>
using namespace std;
struct node{
	vector<int> to,arrive;
}G[10001];
int n,m,k;
struct bfs_node{
	int nownode;
	long long nowtime;
	bfs_node(int _i,int _t):nownode(_i),nowtime(_t){
	}
	bool operator<(const bfs_node &rhs) const{return nowtime<rhs.nowtime;}
	bool operator>(const bfs_node &rhs) const{
		return nowtime>rhs.nowtime;
	}
};
bool vis[10001][101]; 
int bfs(){
	priority_queue<bfs_node,vector<bfs_node>,greater<bfs_node> > q;
	q.push(bfs_node(1,0));
	long long minn=100000000000ll;
	while(q.size()){
		bfs_node fnt=q.top();
//		cout << "fnt.time=" << fnt.nowtime << ".\n";
		q.pop();
		if(fnt.nownode==n){
			if(fnt.nowtime%k==0)	minn=min(minn,fnt.nowtime); 
			continue;
		}
		if(vis[fnt.nownode][fnt.nowtime%k])	continue;
		vis[fnt.nownode][fnt.nowtime%k]=true; 
		for(int i=0,siz=G[fnt.nownode].to.size();i<siz;i++){
			int t=fnt.nowtime+1;
			if(vis[G[fnt.nownode].to[i]][t%k])	continue;
			if(t<G[fnt.nownode].arrive[i]){
				int tmp=G[fnt.nownode].arrive[i]-t;
				if(tmp%k==0){
					t+=tmp;
				} else{
					t+=(tmp/k+1)*k;
				}
			}
			q.push(bfs_node(G[fnt.nownode].to[i],t));
//			cout << "q.siz=" << q.size() << ".\n";
		}
	}
	return (minn==100000000000ll?-1:minn);
}
int main(){
// 	freopen("bus.in","r",stdin);
// 	freopen("bus.out","w",stdout);
	cin >> n >> m >> k;
	for(int i=0;i<m;i++){
		int u,v,w;
		cin >> u >> v >> w;
		G[u].to.push_back(v);
		G[u].arrive.push_back(w); 
	}
	cout << bfs();
	fclose(stdin);
	fclose(stdout);
	return 0;
} 

另,要怎么改qwq

2023/10/30 20:33
加载中...