#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int INF = INT_MAX / 4; void shortestPath(const vector >& edges, int start, vector& dist) { int n = edges.size(); dist.assign(n, INF); dist[start] = 0; queue q; q.push(start); while(!q.empty()){ int v = q.front(); q.pop(); for(unsigned i=0; i >& edges, vector >& dist) { dist.resize(edges.size()); for(unsigned i=0; i >& dist, const vector node) { int n = node.size(); vector > dp(1<(n, INF)); for(int i=0; i bs(i); for(int j=0; j> n >> m >> k; vector > edges(n); for(int i=0; i> a >> b; edges[a-1].push_back(b-1); edges[b-1].push_back(a-1); } vector > dist; shortestPath(edges, dist); long long ret = 0; vector node; for(int i=n-1; i>0; --i){ node.push_back(i); if(solve(dist, node) <= k) ret += (1LL << i) - 1; else node.pop_back(); } cout << ret << endl; return 0; }