Bauke Mollema partly made up for his late collapse at the Tour de France by winning the one-day Clasica San Sebastian in Spain on Saturday.
The Trek-Segafredo rider attacked out of a four-man lead group at the summit of the final climb, with 8.1km to go, and hung on down the descent to the finish line to win by five seconds.
Tony Gallopin (Lotto Soudal) defeated Alejandro Valverde (Movistar) in the sprint for second place, while Joaquim Rodriguez (Katusha) followed in fourth.
Britain's Simon Yates (Orica-BikeExchange) was the first rider to attack on the final climb but was caught and eventually finished 34 seconds adrift in seventh.
Adam Yates (Orica-BikeExchange), who won last year's Clasica San Sebastian and was racing for the first time since finishing fourth at the Tour, was poorly positioned on the final climb and could only cross the line in 16th place, 50 seconds back.
Mollema had been second overall with three stages of the Tour to go but then suffered a major collapse and plummeted to 11th.
He said: "It's one of my favourite races and I'm really happy to win. I felt good all day and recovered from the Tour.
"The last days of the Tour de France were really disappointing for me and it was a good way to fight back. I showed I am in good form and also, looking forward to the Olympics, this is a great result.
"It's really nice to win a big classic like this; it's the first WorldTour classic I have won. I have always wanted to be on the podium of this race."
The Olympic road race takes place on a similar course to the Clasica San Sebastian, on Saturday, August 6. Follow the action with our live blog from 3pm BST.
Clasica San Sebastian result
1 Bauke Mollema (Ned) Trek-Segafredo, 5:31:00
2 Tony Gallopin (Fra) Lotto Soudal, +17sec
3 Alejandro Valverde (Esp) Movistar, same time
4 Joaquim Rodriguez (Esp) Katusha, +22
5 Greg Van Avermaet (Bel) BMC Racing, +34
6 Gianluca Brambilla (Ita) Etixx - Quick-Step, st
7 Simon Yates (GB) Orica-BikeExchange, st
8 Tom-Jelte Slagter (Ned) Cannondale-Drapac, st
9 Nicolas Roche (Irl) Team Sky, st
10 Dries Devenyns (Bel) IAM Cycling, +37
Selected other
16 Adam Yates (GB) Orica-BikeExchange, +50