为什么这题别人不用高精也能过?而我不能。
我的代码如下:
https://www.luogu.com.cn/record/70494547
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
const int N = 1e3 + 10;
int n;
int a, b, c;
long long dis[N];
long long ans[N];
bool v[N];
struct edge{
int to;
int w;
};
vector <edge> g[N];
pair <long long, int> t;
priority_queue <pair<long long, int>, vector<pair<long long, int> >, greater<pair<long long, int> > > q;
int main(){
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%lld", &dis[i]);
ans[i] = 1;
q.push(make_pair(dis[i], i));
}
while(scanf("%d%d%d", &a, &b, &c) != EOF){
g[a].push_back({c, b});
if(a != b){
g[b].push_back({c, a});
}
}
while(!q.empty()){
t = q.top();
q.pop();
if(v[t.second]){
continue;
}
v[t.second] = 1;
for(auto i : g[t.second]){
if(v[i.w]){
if(t.first + dis[i.w] == dis[i.to]){
ans[i.to] += ans[t.second] * ans[i.w];
}else{
if(t.first + dis[i.w] < dis[i.to]){
dis[i.to] = t.first + dis[i.w];
ans[i.to] = ans[t.second] * ans[i.w];
q.push(make_pair(dis[i.to], i.to));
}
}
}
}
}
printf("%lld %lld\n", dis[0], ans[0]);
return 0;
}
别人的代码如下:
https://www.luogu.com.cn/record/70192773
#include <bits/stdc++.h>
#define int long long
using namespace std;
inline int init()
{
char c;
while (!isdigit(c = getchar())) if (c == EOF) return EOF;
int x(c ^ 48);
while (isdigit(c = getchar())) x = x * 10 + (c ^ 48);
return x;
}
int n, d[1005], cnt[1005], g[1005][1005];
bool vis[1005];
signed main()
{
n = init();
for (int i(1); i <= n; ++i) d[i] = init(), cnt[i] = 1;
for (int a, b, c; ~(a = init(), b = init(), c = init()); )
++a, ++b, ++c, g[a][b] = g[b][a] = c;
d[0] = 1e18;
for (int i(1); i <= n; ++i)
{
int mink(0);
for (int j(1); j <= n; ++j)
if (!vis[j] && d[mink] > d[j]) mink = j;
if (mink == 1) return !printf("%lld %lld", d[1], cnt[1]);
vis[mink] = 1;
for (int j(1); j <= n; ++j)
if (vis[j] && g[mink][j])
{
int t(d[mink] + d[j]), &dis(d[g[mink][j]]);
if (dis == t) cnt[g[mink][j]] += cnt[mink] * cnt[j];
else if (dis > t) dis = t, cnt[g[mink][j]] = cnt[mink] * cnt[j];
}
}
return 0;
}
最后一组数据应该是这里来的:https://www.luogu.com.cn/discuss/412640
但是我在自己电脑上测了这组 hack 数据,两种做法均不能通过。
请问为什么别人的没高精过了(现在交也还是AC),我的不行(Unaccepted 100 )