http://codeforces.com/problemset/problem/102/A
暴力搜索
#include<bits/stdc++.h> using namespace std; #define ll long long vector<int> p[1111]; bool ma[1111][1111]; int v[1111]; long long ans; void dfs(int st,int no,int js,int s) { //cout<<s<<endl; if(js>=4) { //cout<<st<<" "<<no<<endl; if(ma[no][st]==1) { if(ans==-1||ans>s) { ans=s; } } return; } for(int i=0;i<p[no].size();i++) { dfs(st,p[no][i],js+1,s+v[p[no][i]]); } } int main() { int n,m; while(~scanf("%d%d",&n,&m)) { memset(ma,0,sizeof(ma)); for(int i=0;i<n;i++) { p[i].clear(); } int a,b; ans=-1; for(int i=1;i<=n;i++) cin>>v[i]; for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); if(ma[a][b]==0) { p[min(a,b)].push_back(max(a,b)); ma[a][b]=ma[b][a]=1; } } for(int i=1;i<=n;i++) { dfs(i,i,2,v[i]); } cout<<ans<<endl; } return 0; }