强行dfs即可
#include <stdio.h> #include <memory.h> #include <math.h> #include <string> #include <string.h> #include <vector> #include <set> #include <stack> #include <queue> #include <algorithm> #include <map> #define I scanf #define OL puts #define O printf #define F(a,b,c) for(a=b;a<c;a++) #define FF(a,b) for(a=0;a<b;a++) #define FG(a,b) for(a=b-1;a>=0;a--) #define LEN 10010 #define MAX 0x06FFFFFF #define V vector<int> using namespace std; int vis[LEN]; vector<int> g[LEN]; int ans=0,N,M; void dfs(int s,int p,int n){ if(n>=3){ ans++; return; } // vis[s]=1; int i,sz=g[s].size(); FF(i,sz){ int to=g[s][i]; if(!vis[to] && to!=p){ dfs(to,s,n+1); } } // vis[s]=0; } int main(){ // freopen("D:/CbWorkspace/blue_bridge/网络寻路.txt","r",stdin); I("%d%d",&N,&M); int i,j,a,b; FF(i,M){ I("%d%d",&a,&b); g[a].push_back(b); g[b].push_back(a); } F(i,1,N+1) dfs(i,0,0); O("%d\n",ans); return 0; }