关于玄学read(不是求调)
  • 板块学术版
  • 楼主MicroSun/fendou
  • 当前回复24
  • 已保存回复24
  • 发布时间2023/7/27 10:08
  • 上次更新2023/11/3 07:26:41
查看原帖
关于玄学read(不是求调)
514700
MicroSun/fendou楼主2023/7/27 10:08

rt,一份普通的最短路

#include <bits/stdc++.h>
using namespace std;
inline int read()
{
    int x = 0;
    char ch = getchar();
    while ((ch < '0' || ch > '9') && (ch ^ -1))
        ch = getchar();
    while (ch >= '0' && ch <= '9') {
        x = (x << 3) + (x << 1) + (ch ^ 48);
        ch = getchar();
    }
    //cerr<<x<<' ';
    return x;
}//一份普通的快读
(省略)
void add(int u,int v,int c){
	cerr<<u<<' '<<v<<' '<<c<<endl;
	nxt[++cnt]=fir[u],fir[u]=cnt,to[cnt]=v,w[cnt]=c;
}
int main(){
	int n=read(),m=read(),s=read();
	for(int i=1,u,v,c;i<=m;i++) /*u=read(),v=read(),c=read(),*/add(read(),read(),read());

我刚开始发现这个代码输出错了,然后进行调试,最后在add函数中加上了调试语句,发现当输入为

4 6 1
1 2 2
2 3 2
2 4 1
1 3 5
3 4 3
1 4 4

时,cerr的输出为

2 2 1 
2 3 2 
1 4 2 
5 3 1 
3 4 3 
4 4 1 

而当我把

for(int i=1;i<=m;i++) add(read(),read(),read());

改为

for(int i=1,u,v,c;i<=m;i++) u=read(),v=read(),c=read(),add(u,v,c);

后,cerr的输出又变为了正常的

1 2 2 
2 3 2 
2 4 1 
1 3 5 
3 4 3 
1 4 4

请问这是怎么回事?

2023/7/27 10:08
加载中...