美文网首页
P10996 【MX-J3-T3】Tuple

P10996 【MX-J3-T3】Tuple

作者: louyang | 来源:发表于2024-10-10 10:54 被阅读0次

这是一道枚举例题,题目大意是,有 m 个三元组两两不同,如果选出四个三元组 (a,b,c),(a,b,d),(a,c,d),(b,c,d),可以满足1≤a<b<c<d≤n,请问有多少种这样的可能性?
n 最大 2000,如果直接枚举 a,b,c,d 四个数字,显然超时。

我们可以枚举 abc,然后再枚举d,同时验证abd和acd,这样时间复杂度就是O(mn)了。

#include <iostream>
#include <set>
#include <vector>
#include <tuple>
using namespace std;

set<tuple<int,int,int>> data;
vector<int> two[2001][2001];

int main() {
  int n, m, ans = 0;
  cin >> n >> m;
  for (int i = 1 ; i <= m ; i++) {
    int u , v , w;
    cin >> u >> v >> w;
        two[u][v].push_back(w);
        data.insert({u,v,w});
    }
  for (auto x : data) {
    int u, v, w;
    tie(u,v,w) = x;
    for (int j = 0 ; j < two[v][w].size() ; j++) {
      int z = two[v][w].at(j);
      if(data.count({u,w,z}) && data.count({u,v,z})) {
        ans++;
      }
    }
  }
  cout << ans << endl;
  return 0;
}

相关文章

网友评论

      本文标题:P10996 【MX-J3-T3】Tuple

      本文链接:https://www.haomeiwen.com/subject/zadwrjtx.html