2 条题解
-
0
暴力出奇迹,搭配上O2轻松通过这道题
#include <bits/stdc++.h> using namespace std; const int N = 5e4 + 5; int n, m, u, v, w, ans; struct Node { int v, w; } ; struct P { int u, v, w; bool operator<(const P& other) const { return tie(u, v, w) < tie(other.u, other.v, other.w); } }; vector <Node> p[2005]; set <P> ma; int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0' || ch>'9'){ if(ch=='-') f=-1;ch=getchar();} while(ch>='0' && ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();} return x*f; } int main() { n = read(); m = read(); while (m--) { u = read(); v = read(); w = read(); p[u].push_back({v, w}); ma.insert({u, v, w}); } for (int i = 1; i <= n; ++i) for (int j = 0; j < p[i].size(); ++j) { int b = p[i][j].v, c = p[i][j].w; for (int k = 0; k < p[b].size(); ++k) { int d = p[b][k].w; if (c != p[b][k].v) continue; if (ma.find({i, b, d}) != ma.end() && ma.find({i, c, d}) != ma.end()) ++ans; } } printf("%d", ans); return 0; }
-
-4
貌似没有人提交题解,我来一个吧,发现没有题解的题通过率那么低。
#include<bits/stdc++.h> using namespace std; int n,m,cnt=0; vector<int> eg[2005][2005]; bool *ex[2005][2005]; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ int u,v,w; scanf("%d%d%d",&u,&v,&w); eg[u][v].emplace_back(w); if(ex[v][w]==nullptr){ ex[v][w]=new bool[2005]; memset(ex[v][w],0,2005); } ex[v][w][u]=1; } for(int a=1;a<n;a++) for(int b=a+1;b<=n;b++){ sort(eg[a][b].begin(),eg[a][b].end()); for(int cc=0;cc<eg[a][b].size();cc++) for(int dd=cc+1;dd<eg[a][b].size();dd++){ int c=eg[a][b][cc],d=eg[a][b][dd]; if(ex[c][d]!=nullptr && ex[c][d][a] && ex[c][d][b]) cnt++; } } cout<<cnt<<endl; return 0; }
代码自己理解,保证全AC
- 1
信息
- ID
- 43
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 4
- 标签
- 递交数
- 744
- 已通过
- 95
- 上传者