错误代码求条,玄2~ 6关,谢谢!
查看原帖
错误代码求条,玄2~ 6关,谢谢!
833737
Lyw_and_Segment_Tree楼主2024/6/24 13:16
#include<bits/stdc++.h>
using namespace std;
const long long inf = 2147483647;
const int maxn = 2e5 + 5;
int n, m, tot = 0, cnt = 0;
long long dis[maxn], vis[maxn];
long long to[maxn], val[maxn], nxt[maxn], h[maxn];
struct node {
    long long v, w;
    friend bool operator > (node a, node b) {
        return a.w < b.w;
    }
} tmp;
struct dot {
	long long a[15];
} s;
map< dot, int > Map;
priority_queue<node> q;
long long dist(dot x, dot y, long long w) {
	long long sum = 0;
	for(int i = 1; i <= n; i++) {
		sum += ((x.a[i] - y.a[i]) * (x.a[i] - y.a[i])) * w;
	}
	return sum;
}
void add(long long u, long long v, long  long w) {
    tot++;
    to[tot] = v;
    val[tot] = w;
    nxt[tot] = h[u];
    h[u] = tot;
}
void Dijkstra(int s) {
    for(int i = 1; i <= 2 * m; i++) dis[i] = inf, vis[i] = 0;
    dis[s] = 0;
    tmp.v = s, tmp.w = 0;
    q.push(tmp);
    while(!q.empty()) {
        long long u = q.top().v;
        q.pop();
        if(vis[u]) continue;
        vis[u] = 1;
        for(long long i = h[u]; i; i = nxt[i]) {
            if(dis[to[i]] >  dis[u] + val[i]) {
                dis[to[i]] = dis[u] + val[i];
                tmp.w = dis[to[i]];
                tmp.v = to[i];
                q.push(tmp);
            }
        }
    }
}
int main() {
    cin >> n >> m;
    for(int i = 1; i <= m; i++) {
    	dot u, v;
		long long w;
    	for(int j = 1; j <= n; j++) {
    		cin >> u.a[j];
		}
		for(int j = 1; j <= n; j++) {
			cin >> v.a[j];
		}
		if(Map[u] == 0) {
			cnt++;
			Map[u] = cnt; 
		}
		if(Map[v] == 0) {
			cnt++;
			Map[v] = cnt;
		}
		cin >> w;
		w = dist(u, v, w);
		add(Map[u], Map[v], w);
	}
    for(int i = 1; i <= n; i++) {
    	cin >> s.a[i];
	}
	if(Map[s] == 0) cnt++, Map[s] = cnt;
    Dijkstra(Map[s]);
    long long ans = 0;
    for(int i = 1; i <= 2 * m; i++) {
        // cout << dis[i] << endl;
        if(dis[i] != 0 && dis[i] != inf) {
            ans += dis[i];
        }
    }
    cout << ans << endl;
}

报错信息如下:

In file included from /nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/string:49,
                 from /nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bitset:52,
                 from /nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/x86_64-unknown-linux-gnu/bits/stdc++.h:52,
                 from /tmp/compiler_j_xb89mf/src:1:
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_function.h: In instantiation of ‘bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = dot]’:
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_map.h:511:32:   required from ‘std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = dot; _Tp = int; _Compare = std::less<dot>; _Alloc = std::allocator<std::pair<const dot, int> >; mapped_type = int; key_type = dot]’
/tmp/compiler_j_xb89mf/src:64:11:   required from here
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_function.h:408:20: 错误:no match for ‘operator<’ (operand types are ‘const dot’ and ‘const dot’)
  408 |       { return __x < __y; }
      |                ~~~~^~~~~
In file included from /nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_algobase.h:64,
                 from /nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/algorithm:60,
                 from /nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/x86_64-unknown-linux-gnu/bits/stdc++.h:51:
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_pair.h:835:5: 附注:candidate: ‘template<class _T1, class _T2> bool std::operator<(const pair<_T1, _T2>&, const pair<_T1, _T2>&)’
  835 |     operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
      |     ^~~~~~~~
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_pair.h:835:5: 附注:  template argument deduction/substitution failed:
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_function.h:408:20: 附注:  ‘const dot’ is not derived from ‘const std::pair<_T1, _T2>’
  408 |       { return __x < __y; }
      |                ~~~~^~~~~
In file included from /nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_algobase.h:67:
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_iterator.h:455:5: 附注:candidate: ‘template<class _Iterator> bool std::operator<(const reverse_iterator<_Iterator>&, const reverse_iterator<_Iterator>&)’
  455 |     operator<(const reverse_iterator<_Iterator>& __x,
      |     ^~~~~~~~
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_iterator.h:455:5: 附注:  template argument deduction/substitution failed:
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_function.h:408:20: 附注:  ‘const dot’ is not derived from ‘const std::reverse_iterator<_Iterator>’
  408 |       { return __x < __y; }
      |                ~~~~^~~~~
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_iterator.h:500:5: 附注:candidate: ‘template<class _IteratorL, class _IteratorR> bool std::operator<(const reverse_iterator<_Iterator>&, const reverse_iterator<_IteratorR>&)’
  500 |     operator<(const reverse_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_iterator.h:500:5: 附注:  template argument deduction/substitution failed:
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_function.h:408:20: 附注:  ‘const dot’ is not derived from ‘const std::reverse_iterator<_Iterator>’
  408 |       { return __x < __y; }
      |                ~~~~^~~~~
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_function.h: In instantiation of ‘bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = node]’:
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/predefined_ops.h:196:23:   required from ‘bool __gnu_cxx::__ops::_Iter_comp_val<_Compare>::operator()(_Iterator, _Value&) [with _Iterator = __gnu_cxx::__normal_iterator<node*, std::vector<node, std::allocator<node> > >; _Value = node; _Compare = std::less<node>]’
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_heap.h:140:48:   required from ‘void std::__push_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare&) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<node*, vector<node, allocator<node> > >; _Distance = long int; _Tp = node; _Compare = __gnu_cxx::__ops::_Iter_comp_val<less<node> >]’
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_heap.h:216:23:   required from ‘void std::push_heap(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<node*, vector<node, allocator<node> > >; _Compare = less<node>]’
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_queue.h:741:16:   required from ‘void std::priority_queue<_Tp, _Sequence, _Compare>::push(const value_type&) [with _Tp = node; _Sequence = std::vector<node, std::allocator<node> >; _Compare = std::less<node>; value_type = node]’
/tmp/compiler_j_xb89mf/src:37:11:   required from here
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_function.h:408:20: 错误:no match for ‘operator<’ (operand types are ‘const node’ and ‘const node’)
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_pair.h:835:5: 附注:candidate: ‘template<class _T1, class _T2> bool std::operator<(const pair<_T1, _T2>&, const pair<_T1, _T2>&)’
  835 |     operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
      |     ^~~~~~~~
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_pair.h:835:5: 附注:  template argument deduction/substitution failed:
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_function.h:408:20: 附注:  ‘const node’ is not derived from ‘const std::pair<_T1, _T2>’
  408 |       { return __x < __y; }
      |                ~~~~^~~~~
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_iterator.h:455:5: 附注:candidate: ‘template<class _Iterator> bool std::operator<(const reverse_iterator<_Iterator>&, const reverse_iterator<_Iterator>&)’
  455 |     operator<(const reverse_iterator<_Iterator>& __x,
      |     ^~~~~~~~
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_iterator.h:455:5: 附注:  template argument deduction/substitution failed:
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_function.h:408:20: 附注:  ‘const node’ is not derived from ‘const std::reverse_iterator<_Iterator>’
  408 |       { return __x < __y; }
      |                ~~~~^~~~~
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_iterator.h:500:5: 附注:candidate: ‘template<class _IteratorL, class _IteratorR> bool std::operator<(const reverse_iterator<_Iterator>&, const reverse_iterator<_IteratorR>&)’
  500 |     operator<(const reverse_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_iterator.h:500:5: 附注:  template argument deduction/substitution failed:
/nix/store/al0w33yvyzkjm86ndpf42knjfymfisph-luogu-gcc-13.2.0/include/c++/13.2.0/bits/stl_function.h:408:20: 附注:  ‘const node’ is not derived from ‘const std::reverse_iterator<_Iterator>’
  408 |       { return __x < __y; }
      |                ~~~~^~~~~

代码的基本思路是用 dot 结构体表示一个 nn 维的点,然后用 map 将点映射成一个编号,从而进行 Dijkstra,请在该思路的基础上进行修改,悬 2 ~ 6 关不等,谢谢!

2024/6/24 13:16
加载中...