数据规模小,所以就暴力枚举每一种颜色的边就行了。
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<cmath> #include<map> #include<set> #include<vector> #include<algorithm> #include<stack> #include<queue> #include<cctype> #include<sstream> using namespace std; #define pii pair<int,int> #define LL long long int const int eps=1e-8; const int INF=1000000000; const int maxn=100+10; int n,m,a,b,c,q,u,v; vector<pii>vv[maxn]; int flag[maxn]; void dfs(int s,int co) { if(flag[s]) return; else { flag[s]=1; int siz=vv[s].size(); for(int i=0;i<siz;i++) { if(vv[s][i].second==co) { dfs(vv[s][i].first,co); } } return; } } int main() { //freopen("in2.txt","r",stdin); //freopen("out.txt","w",stdout); scanf("%d%d",&n,&m); for(int i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); vv[a].push_back(make_pair(b,c)); vv[b].push_back(make_pair(a,c)); } scanf("%d",&q); for(int i=0;i<q;i++) { scanf("%d%d",&u,&v); int ans=0; for(int j=1;j<=100;j++)//枚举每种颜色的边 { memset(flag,0,sizeof(flag)); dfs(u,j); ans+=flag[v]; } printf("%d ",ans); } //fclose(stdin); //fclose(stdout); return 0; }