这道题的数据要怎么输入
查看原帖
这道题的数据要怎么输入
946515
66xyyd楼主2023/8/14 10:18

rt,用getline输入有问题,下载的数据在本地都能跑过,别的oj也能AC,就落谷我只拿了30分。尝试过把末尾的非数字符号吞掉,但全RE。所以我要怎么输入数据啊?

#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<queue>
using namespace std;
int n,m;
string tmp;
vector<int> tmpto;
bool vis[1001];
vector<pair<int,int>> to[1001];
void bfs(){
	queue<pair<int,pair<int,int>>> q;
	q.push(make_pair(1,make_pair(-1,-1)));
	vis[1]=1;
	while(q.size()){
		pair<int,pair<int,int>> fnt=q.front();
		q.pop();
		if(fnt.first==n){
			cout << fnt.second.first;
			return;
		}
		for(int i=0,siz=to[fnt.first].size();i<siz;i++){
			if(vis[to[fnt.first][i].first])	continue;
			int v=to[fnt.first][i].first;
//			cout << '#' << fnt.first << " visited #" << v << ".\n";
			q.push(make_pair(v,make_pair(fnt.second.first+(fnt.second.second==to[fnt.first][i].second?0:1),to[fnt.first][i].second)));
			vis[v]=1;
		}
	}
	cout << "NO";
}
int main(){
	cin >> m >> n;
	int id=0;
	while(m--){
//		cout << "m=" << m << ".\n";
		tmp.clear();
		while(tmp.empty())	getline(cin,tmp);
		istringstream sin(tmp);
		tmpto.clear();
		int p,cnt=0;
		while(sin >> p && sin){
			tmpto.push_back(p);
			cnt++;
		}
		for(int i=0;i<cnt;i++){
			for(int j=i+1;j<cnt;j++){
				to[tmpto[i]].push_back(make_pair(tmpto[j],id));
			}
		}
		++id;
	}
//	for(int i=0;i<=n;i++){
//		for(auto &sth:to[i]){
//			cout << sth.first << ' ';
//		}
//		cout << '\n';
//	}
	bfs();
	return 0;
}
2023/8/14 10:18
加载中...